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

    • OpenAI slashes o3 price by 80% in direct challenge to Gemini 2.5 Pro by Pradeep Viswanathan Back in April, OpenAI released o3, its flagship reasoning model, which delivered state-of-the-art (SOTA) results on several AI benchmarks, including Codeforces, SWE-bench, and MMMU. The o3 model also included support for external tools, such as web browsing, a Python interpreter, and more. Although o3 was the most powerful model available from OpenAI, it was not widely adopted by developers due to its pricing compared to other alternatives. Google’s Gemini 2.5 Pro model offered nearly the same performance at one-quarter of the cost, while Anthropic’s Claude 3.7 models delivered better coding performance at a similar price. Today, OpenAI is responding to developer feedback by reducing the price of the o3 model by nearly 80%. At launch, the o3 model was priced at $10 per million input tokens and $40 per million output tokens. As of today, OpenAI is lowering the price to $2 per million input tokens and $8 per million output tokens. This price drop makes o3 a much more attractive option for developers. You can refer to the benchmark comparison table below, which Google published last week during the launch of the Gemini 2.5 Pro June update, to see how OpenAI’s o3 compares with other leading models. In addition to the price reduction, OpenAI is also launching o3 Pro, its new flagship reasoning model, later today. The o3 Pro model is expected to outperform the Gemini 2.5 Pro June update on several key AI benchmarks and may be priced at $10 per million input tokens and $40 per million output tokens.
    • From my understanding.... Thunderbolt isn't like USB ... where you can simply plug a couple of TB ports into the header.  The header itself isn't "Thunderbolt" ... the header connects to the add-on Thunderbolt I/O card for management. I'm sure Nik can better articulate...   ...helpful as always...
    • That said, it might be living somewhat dangerously to blindly rename existing *.BAT files to *.CMD, due to differences in ERRORLEVEL handling between the two extensions. See https://ss64.com/nt/errorlevel.html . For new scripts intended only for recent Windows versions, yes, using .CMD is a good idea.
    • And even if you think someone is an idiot, that doesn't mean they can't tell the truth. But I suppose people like BadBot don't care, it wouldn't be the first time he acted like that.
    • Because it was generated with AI (which you have to disclose), it means that you cannot copyright it (only humans get copyright). Which anyone who wants to can just steal your work for whatever reason they want, even selling the same thing on the same site, in China, etc. In short, the user will quickly learn why copyrights exist in the law to protect authors from having their work stolen. So, think about using this despicable pile of AI slop shop as a learning experience.
  • Recent Achievements

    • Reacting Well
      Alan- earned a badge
      Reacting Well
    • Week One Done
      IAMFLUXX earned a badge
      Week One Done
    • One Month Later
      Æhund earned a badge
      One Month Later
    • One Month Later
      CoolRaoul earned a badge
      One Month Later
    • First Post
      Kurotama earned a badge
      First Post
  • Popular Contributors

    1. 1
      +primortal
      526
    2. 2
      ATLien_0
      276
    3. 3
      +FloatingFatMan
      216
    4. 4
      +Edouard
      206
    5. 5
      snowy owl
      140
  • Tell a friend

    Love Neowin? Tell a friend!