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

    • We went from a Latitude 7450 to Dell Pro 14 Plus PB14250
    • EA Sports UFC 5 is free-to-play on Xbox Series X|S this weekend by Pulasthi Ariyasinghe Every Thursday Microsoft brings in a fresh slate of games for Xbox gamers to try over the weekend as a part of its Free Play Days promotion. The latest refresh that arrived today only revealed a single title for the weekend, and that's EA Sports UFC 5. This is a special occasion as well. Unlike the standard events, this one does not require any tier of Game Pass to jump in. All Xbox Series X|S owners can play the game over the weekend, even if they do not have a Core subscription. As always, any progress made during the weekend also carries over automatically if you decide to purchase the game afterward. Coming in from EA Sports, UFC 5 is the latest entry in the long-running mixed martial arts fighting games. This installment landed in 2023 for the latest generation consoles. Built on DICE's Frostbite Engine for the first time, the title event received an M rating by the ESRB for its realistic injury system, as EA wanted to make a more authentic experience akin to the real-world sport. The damage system, dubbed the Real Impact System, involves depicting blood and sweat on fighters as well as facial injuries. Having injuries like bruised eyes or broken noses can even affect the performance of a fighter due to impaired vision or breathing difficulty. A doctor stoppage may even happen if the injuries become too severe. UFC 5 offers a single-player career mode to become the top-ranked fighter, online modes for competitive action, and special events tied to real-world fights. Here are the store links for the game: UFC 5 - $27.99 (Xbox Series X|S) UFC 5 Deluxe Edition - $31.99 (Xbox Series X|S) UFC 5 Ultimate Edition - $89.99 (Xbox Series X|S) This Free Play Days promotion will end on Sunday, June 29, at 11:59 pm PT. Following this, expect another round of games to enter the program next Thursday, July 3.
    • Windows 11 KB5060826 optional update brings better Setup, new data migration tool, more by Sayan Sen Alongside KB5060829 for Windows 11 24H2, Microsoft has also released its C-release non-security preview update for Windows 11 23H2 and 22H2 today. The new update is rolling out under KB5060826 (builds 22621.5549 and 22631.5549). KB5060826 brings an upgraded Setup which will now let admins choose whether to deploy critical updates during the OOBE (the initial out-of-box experience setup on Windows). Alongside that, it also adds the new PC migration experience on Windows Backup, as well as the default app changes related to the European Economic Area (EEA) region. The full changelog is given below: First up we have the changes and improvements for Gradual Rollout: [App defaults] New! We are rolling out some small changes in the European Economic Area (EEA) region for default browsers through the Set default button in Settings > Apps > Default apps: Additional file and link types will be set for the new default browser, if it registers them. The new default browser will be pinned to the Taskbar and Start menu unless you choose not to pin it by clearing the checkboxes. There is now a separate one-click button for browsers to change your .pdf default, if the browser registers for the .pdf file type. [PC Migration] New! The PC-to-PC migration experience in Windows is starting to roll out. You’ll begin to see the landing and the pairing page in the Windows Backup app, giving you a first look at what’s coming. In the full experience, you’ll be able to transfer files and settings from an old PC to a new one during setup. Support for this feature during PC setup will arrive in a future update. The rollout is being introduced in phases to support a smooth experience. [Windows Share] ​​​​​​​New! When you share links or web content using the Windows share window, you will see a visual preview for that content. Up next, we have Normal Rollout features: [Windows Setup] New! Admins can configure whether a new device gets critical updates during the out-of-box experience (OOBE). The update has a single known issue related to Noto fonts. You can view the support article here on Microsoft's official website. The update can be obtained by clicking on "Check for optional updates" inside Windows Update. You can also download it manually from Microsoft Update Catalog website.
    • American? Yer whole 120v limitation is madness.  You can still get low powered pcs , nice, that'll do the job 
    • People want a resizable taskbar, not tiny icons on a fat one. Microsoft, you've done it again.
  • Recent Achievements

    • One Month Later
      jfam earned a badge
      One Month Later
    • First Post
      TheRingmaster earned a badge
      First Post
    • Conversation Starter
      Kavin25 earned a badge
      Conversation Starter
    • One Month Later
      Leonard grant earned a badge
      One Month Later
    • Week One Done
      pcdoctorsnet earned a badge
      Week One Done
  • Popular Contributors

    1. 1
      +primortal
      569
    2. 2
      ATLien_0
      186
    3. 3
      +FloatingFatMan
      176
    4. 4
      Michael Scrip
      144
    5. 5
      Xenon
      116
  • Tell a friend

    Love Neowin? Tell a friend!