mediator Posted August 5, 2013 Share Posted August 5, 2013 Hi, I need to send a mail from Linux box/bash with the following paramaters. 1. Mail from 2. Recipients 3. Mail server IP 4. Subject Please help me how to do this. Link to comment https://www.neowin.net/forum/topic/1168785-mail-from-linuxshell/ Share on other sites More sharing options...
Karl L. Posted August 5, 2013 Share Posted August 5, 2013 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. mediator 1 Share Link to comment https://www.neowin.net/forum/topic/1168785-mail-from-linuxshell/#findComment-595859123 Share on other sites More sharing options...
mediator Posted August 6, 2013 Author Share Posted August 6, 2013 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. Link to comment https://www.neowin.net/forum/topic/1168785-mail-from-linuxshell/#findComment-595860183 Share on other sites More sharing options...
ichi Posted August 6, 2013 Share Posted August 6, 2013 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. mediator 1 Share Link to comment https://www.neowin.net/forum/topic/1168785-mail-from-linuxshell/#findComment-595860385 Share on other sites More sharing options...
+Majesticmerc MVC Posted August 6, 2013 MVC Share Posted August 6, 2013 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 . QUITYou 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 mediator 1 Share Link to comment https://www.neowin.net/forum/topic/1168785-mail-from-linuxshell/#findComment-595860445 Share on other sites More sharing options...
Max Norris Posted August 6, 2013 Share Posted August 6, 2013 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 mediator 1 Share Link to comment https://www.neowin.net/forum/topic/1168785-mail-from-linuxshell/#findComment-595860525 Share on other sites More sharing options...
mediator Posted August 7, 2013 Author Share Posted August 7, 2013 @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. :) Link to comment https://www.neowin.net/forum/topic/1168785-mail-from-linuxshell/#findComment-595862391 Share on other sites More sharing options...
Recommended Posts