Mail from Linux/Shell


Recommended Posts

There is a standard utility simply called mail that is installed by default on most Linux and UNIX systems. You can find a basic tutorial for it here. If you need more functionality than the basics covered in that tutorial, mail is very well documented in its man page.

  On 05/08/2013 at 17:17, xorangekiller said:

There is a standard utility simply called mail that is installed by default on most Linux and UNIX systems. You can find a basic tutorial for it here. If you need more functionality than the basics covered in that tutorial, mail is very well documented in its man page.

 

Hi, I have already done that. But I need a utility which can pass a parameter like "from" and "smtp server ip" and execute it from commandline itself. I have mail, mailx, sendmail installed by default. I have the vbs script for this which uses "from, to, server_IP". But I need to make either a shell script or a simple command for the same.

I might be wrong but I don't think you can pass FROM as parameter to sendmail, postfix or the likes.

 

There's a quirky way to do that, telneting to your local mail server on port 25 and manually forging the email:

HELO yourdomain
MAIL FROM:youraddress@yourdomain
RCPT TO:someone@somewhere
DATA
Subject: this is so awkward Stallman would be proud
blahblah
whateverwhatever
.
QUIT

You could then spawn a non interactive telnet session from your script with all the mail parameters.

 

Again, quirky, but works.

  On 06/08/2013 at 11:10, ichi said:

I might be wrong but I don't think you can pass FROM as parameter to sendmail, postfix or the likes.

 

There's a quirky way to do that, telneting to your local mail server on port 25 and manually forging the email:

HELO yourdomain
MAIL FROM:youraddress@yourdomain
RCPT TO:someone@somewhere
DATA
Subject: this is so awkward Stallman would be proud
blahblah
whateverwhatever
.
QUIT
You could then spawn a non interactive telnet session from your script with all the mail parameters.

 

Again, quirky, but works.

 

In the past I've done something similar. Some distros allow you to open sockets within the shell (Redhat does, Debian doesn't AFAIK), so you can open a socket on port 25 and then redirect output into the "file" that gets created.

 

This is code similar to what I've done in the past. (Untested so it might be bugridden)...

 

 

#! /bin/bash

mail_server="smtp.something.com"
sender="test@test.com"
recipient="someone.else@test.com"
message="Hello, world!"

if ! exec 5<>"/dev/tcp/${mail_server}/25"; then
    echo "Could not open socket on port 25 to send email." >&2
    exit 1
else
    _response_code=""
    _message=""

    # Check socket open return code.
    read -u 5 _response_code _message
    if ! [ "${_response_code}" != "220" ]; then
        echo "Unable to send email to SMTP host. Reason: ${_message}." >&2
        exit 1
    fi

    # Build the email header.
    local _message_header=(
        "HELO"
        "MAIL FROM:<${sender}>"
        "RCPT TO:<${recipient}>"
    )

    # Send the header text.
    for _header in "${_message_header[@]}"; do
        echo -e "${_header}\r" >&5
        read -u 5 _response_code _message
        if [ "220" != "${_response_code}" ]; then
            echo "Unable to send email to SMTP host. Reason: ${_message}." >&2
            exit 1
        fi
    done

    # Signal start of message content.
    echo -e "DATA\r" >&5

    read -u 5 _response_code _message
    if [ "${_response_code}" != "354" ]; then
        echo "Unable to send email to SMTP host. Reason: ${_message}." >&2
        exit 1
    fi

    echo -e "${message}\r" >&5

    # Signal end of message
    echo -e "\r\n.\r" >&5
    read -u 5 _response_code _message

    if [ "220" != "${_response_code}" ]; then
        echo "Unable to send email to SMTP host. Reason: ${_message}." >&2
        exit 1
    fi

    echo "QUIT\r" >&5

    echo "Email sent!"

fi

Python's an easy option too if you want do make your own script, only takes a couple lines of code via smtplib, many distros have it installed by default and super easy to get if not. You mentioned VBScript so you should be able to figure this out rather quickly. An off the cuff example... It might even work, I'm just making this up, haven't tested it, but you can get the gist of it. If anything set it up to handle command line arguments and symlink it into somewhere in your path so you can access it from anywhere if needed.

 

#!/usr/bin/python

import smtplib

sender = 'whoever@whereever.com'
receivers = ['me@here.com','me@there.com']

message = """From: From Me <whoever@whereever.com>
To: To Me <me@here.com>
Subject: Just testing.

This is just a test from Python.
"""

try:
   smtpObj = smtplib.SMTP('localhost')
   smtpObj.sendmail(sender, receivers, message)         
   print "Mail sent ok."
except SMTPException:
   print "Mail not sent."
You can add authentication, encryption and all that if needed. Some more examples on the Python docs site, pretty easy stuff.

http://docs.python.org/2/library/email-examples.html

http://docs.python.org/2/library/smtplib.html

@Ichi - I can do that manually. But I want to know if anyone knows of a working script otherwise it will take me some time make one.

 

@Majesticmerc - Thanx a lot for that script, it looks good. I will try that. :)

 

@MaxNorris - I don't have any experience with python and I don't know if python is installed on the linux box. But I will try that as well. Thanks a lot. :)

 

Anyways, I have found a brilliant perl script which has a lot of options that can be parsed via commandline => http://caspian.dotconf.net/menu/Software/SendEmail/

 

But I would prefer a shell script over perl script for now. Thanks a lot everyone for your time and help. :)

This topic is now closed to further replies.
  • Recently Browsing   0 members

    • No registered users viewing this page.
  • Posts

    • Multiple competing launchers are unironically a gem on PC gaming—I'm not sure why people don't get that yet. Why replicate Apple's horrible control here? Multiple launchers = multiple stores → lower prices for multi-launcher games Every other con seems minute and irrelevant to a vibrant marketplace where you actually save money. The only real complaints I hear are multiple launchers idle as background tasks + people don't like opening multiple apps. For #1, maybe this OS-based launcher should do shutdown idle launchers like GOG. For #2, virtually all launchers let you create shortcuts. Voila, problem solved.
    • Xbox June Update brings unsynced save management, publisher browsing, and more by Pulasthi Ariyasinghe June has been a busy month for Microsoft, bringing major software upgrades across its product stack. It even announced new hardware for its Xbox lineup, finally entering the handheld gaming space. The company's roundup for this month's new features has now been published, and it's touting a great deal of changes. To start off on the PC side, the Xbox app on the platform now has a section to browse by publishers. The company says that this will let players easily discover more games made by their favorite developers and franchises. Copilot for Gaming also landed in beta form recently, letting users ask AI for help when a game gets too difficult. It's only available for iOS and Android for now, with ROG Xbox Ally support coming later this year. Another feature that will hit the Xbox Ally is the new universal launcher feature for the Xbox app on PC. Microsoft just kicked off Xbox Insider testing for this functionality earlier today. Get all the details here. Over on consoles, the ability to hide system apps, pin favorites to the list, and reduce the number of tiles displayed are now available. Game Hubs also arrived as a fresh feature to easily display relevant information when selecting a game to play, offering data on player stats, achievements, friends currently playing, recent captures, available add-ons, events, and more. Double-tapping the play button will quick-launch the game instead. On both Xbox consoles and in the cloud, a new progress bar will now appear when a save has been left behind on a device in an offline state. "A new progress bar, device names, timestamps, and additional details are now displayed when you have previous game saves on another device in an unsynced state," says the company. Microsoft has also added mouse and keyboard controls as well as touch controls for more cloud games this month. These join the fresh additions that have landed on the 'Stream your own game' collection and the Retro Classics app. Check out the full lists on the announcement page here. On top of all this, Microsoft has also announced that Xbox will be at Gamescom this year. While no details have been announced yet, more announcements from Xbox Game Studios may happen at the major gaming event.
    • Hopefully this is a precurser to them linking other launchers to the Xbox console. With this current gen the Xbox has had dismal sales compared to the competition. If they did support Steam, Epic, Ubisoft Connect, etc etc they'd crush on the next gen battle.
    • My update. Didn't see much point in the top panel since global menu isn't there, so going with a win/kde layout now. Overall, I would say Gnome is a disappointment - it's been 15 years and you still have to rely on a bunch of extensions to get anything useful out of it. At the same time, the way Universal Blue / Bluefin is approaching the desktop feels like what Ubuntu should have started doing five years ago (no wonder the guy I learned about this from used to work for Canonical). Maybe I should have gone with Aurora (the KDE variant), or Bazzite with KDE, but I think I have Gnome where it works for me now.       
    • GOG Galaxy offers connecting of other launchers into theirs. And while idea is interesting, I always had issues with Steam that would just lose connection and just not work. Which was annoying.
  • Recent Achievements

    • Dedicated
      Camlann earned a badge
      Dedicated
    • Week One Done
      fredss earned a badge
      Week One Done
    • Dedicated
      fabioc earned a badge
      Dedicated
    • One Month Later
      GoForma earned a badge
      One Month Later
    • Week One Done
      GoForma earned a badge
      Week One Done
  • Popular Contributors

    1. 1
      +primortal
      648
    2. 2
      Michael Scrip
      225
    3. 3
      ATLien_0
      220
    4. 4
      +FloatingFatMan
      145
    5. 5
      Xenon
      136
  • Tell a friend

    Love Neowin? Tell a friend!