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

    • Elon Musk doesn't want you to know Tesla's response to the NHTSA's Robotaxi questions by David Uzondu Recently, Tesla's Robotaxi service began operating in Austin, and almost immediately, the company decided it would prefer you didn't see its homework. Before the launch, the National Highway Traffic Safety Administration (NHTSA) sent Tesla a letter with a deadline of June 19th to answer some questions. Now that Tesla has replied, it has requested that the NHTSA withhold the entire response from the public, classifying it as confidential business information. This isn't too surprising, as the company is notoriously secretive about its performance data, especially in areas like Autopilot and Full Self-Driving. Here are a few paraphrased versions of the questions Tesla faced: How will the system handle bad weather or poor visibility? What happens if the system detects that it cannot drive safely? Does it pull over? Will a human be monitoring the cars remotely or in person? Does the system follow any existing industry standards for autonomous driving? When does Tesla plan to let other people operate their own cars as robotaxis? The feds have good reason to ask. On its first day, Tesla's Robotaxi service was caught on video making some questionable moves, including driving in the wrong lane against traffic, as seen below (full video here). The clip was also shared in our community forums, though you'll need a free membership to access the off-topic section. Here's another showing a Robotaxi dropping passengers in the middle of an intersection. For now, the service runs with a human safety driver (likely a Tesla employee) in the passenger seat. Billionaire Dan O'Dowd, a persistent critic of Tesla's software, felt the company's launch was lackluster, and the videos circulating online demonstrate that the technology is years behind competitors like Waymo, which has operated without in-car supervisors since 2019. For its part, NHTSA acknowledged being aware of the widely reported incidents and is in contact with Tesla to get more information. The agency's statement reminded the public that manufacturers self-certify their vehicles' safety, and NHTSA's role is to investigate and act on safety problems after they are on the road: This situation gets even more interesting when you look at the bigger picture. Musk has already been criticized for his role in the Department of Government Efficiency (DOGE), which has led to job cuts at agencies that oversee his companies, including the Federal Aviation Administration (FAA) for SpaceX, the Food and Drug Administration (FDA) for Neuralink, and, of course, NHTSA. This has led some to worry about regulatory capture. As one cynical comment on Electrek's article notes, the official who signed the letter to Tesla, Tanya Topka, Director of NHTSA's Office of Defects Investigation, may have put a target on her back just for trying to hold the company accountable.
    • Have you ever developed a game for Xbox and Windows at the same time? To say that they are not the same operating system and the same DirecTx by chance?? It's obvious that it isn't, right? So what if Xbox uses HyperV? What difference does that make to a game developer? The PS4 is more different than the PS5, different operating systems and different APIs. The games are not backwards compatible However, a game made in Windows can be transferred to Xbox SX in a few weeks with little programming costs because they are the same API and the same Windows
    • Idiot, FH5 sold more on Xbox and Windows than on PS5. You tell lies like that and think no one will check, right? There are a lot of FIFA and CoD hacks on PS4 and PS5 being used every day and Sony doesn't do anything. You can also buy a game's Platinum achievement without having bought the game and Sony doesn't do anything.
    • $80 a game? What do I get for it? A broken game on release, with needs GBs of storage for patches. Still going to put up with micro purchasing? Still need internet to play the game? yep. I could go on, point is...you're paying more but not getting more than what is already being offered by competitors (at a lower price).
  • Recent Achievements

    • First Post
      956400 earned a badge
      First Post
    • Week One Done
      davidfegan earned a badge
      Week One Done
    • First Post
      Ainajohn earned a badge
      First Post
    • Conversation Starter
      sophiaisabella32 earned a badge
      Conversation Starter
    • First Post
      Brett76 earned a badge
      First Post
  • Popular Contributors

    1. 1
      +primortal
      592
    2. 2
      ATLien_0
      223
    3. 3
      Michael Scrip
      173
    4. 4
      +FloatingFatMan
      146
    5. 5
      Xenon
      134
  • Tell a friend

    Love Neowin? Tell a friend!