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

    • Thanks, I'll download it and see how it goes. Gonna be tough. I've used Nova Launcher for around 10+ years I think.
    • Wikipedia has become hot molasses with mostly filth masquerading as truth. Most of it is the imagination of few writers who think of themselves as above god. The narrative setup is mind boggling.
    • he donates it all to his foundation to launder, trying to avoid inheritance tax while buying up africa
    • No. 1/10th the cost of a Mac? The Mini starts at 599. What mini-pc costs 1/10th of that? The OS is nothing like macOS. Sure you can make it look like it, but it won’t work anything like it. Applications won’t install, or remove the same. Application compatibility will be different. Managing the OS is completely dissimilar, the biggest common ground will be a few CLI utilities. You can definitely get yourself an inexpensive little setup that has a good Linux distro and be happy. It won’t be 1/10th the cost or essentially a Mac though.
    • Vivaldi 7.4.3684.50 by Razvan Serea Vivaldi is a cross-platform web browser built for – and with – the web. A browser based on the Blink engine (same in Chrome and Chromium) that is fast, but also a browser that is rich in functionality, highly flexible and puts the user first. A browser that is made for you. Vivaldi is produced with love by a founding team of browser pioneers, including former CEO Jon Stephenson von Tetzchner, who co-founded and led Opera Software. Vivaldi’s interface is very customizable. Vivaldi combines simplicity and fashion to create a basic, highly customizable interface that provides everything a internet user could need. The browser allows users to customize the appearance of UI elements such as background color, overall theme, address bar and tab positioning, and start pages. Vivaldi features the ability to "stack" and "tile" tabs, annotate web pages, add notes to bookmarks and much more. Vivaldi 7.4.3684.50 changelog: [Chromium] Update to 136.0.7103.170 [Crash][Mail][JSError] RangeError: Maximum call stack size exceeded (VB-115288) Download: Vivaldi 64-bit | 125.0 MB (Freeware) Download: Vivaldi 32-bit | ARM64 View: Vivaldi Home Page | Screenshot Get alerted to all of our Software updates on Twitter at @NeowinSoftware
  • Recent Achievements

    • Apprentice
      Adrian Williams went up a rank
      Apprentice
    • Reacting Well
      BashOrgRu earned a badge
      Reacting Well
    • Collaborator
      CHUNWEI earned a badge
      Collaborator
    • Apprentice
      Cole Multipass went up a rank
      Apprentice
    • Posting Machine
      David Uzondu earned a badge
      Posting Machine
  • Popular Contributors

    1. 1
      +primortal
      517
    2. 2
      ATLien_0
      261
    3. 3
      +Edouard
      191
    4. 4
      +FloatingFatMan
      178
    5. 5
      snowy owl
      135
  • Tell a friend

    Love Neowin? Tell a friend!