Sending email or mail with attachment from command or shell prompt
by nixcraft on August 13, 2004 · 79 comments
If you are looking to send email with attachment via shell script or at shell prompt/command line (read as bash prompt), use mutt command.
Mutt is a small but very powerful text based program for reading electronic mail under UNIX /Linux operating systems, including support for color terminals, MIME, and a threaded sorting mode.
Please note that mutt is a pure MUA and cannot send e-mail without proper email server . You need a working Mail Transfer Agent (MTA) such as sendmail or postfix. I am assuming that you have configured email server.
Install mutt
If mutt is not installed, use apt-get or yum or up2date command as follows (login as a root user):
(A) Debian Linux / Ubuntu Linux user use following command to install mutt:# apt-get install mutt
B) Fedora / CentOS or Red Hat Linux (RHEL) user can use following command to install mutt:# yum install mutt
OR# up2date mutt
C) FreeBSD user use following command to install mutt via pkg_add command:# pkg_add -v -r mutt
How do I send email attachments from a command prompt?
1) Use mutt command as follows to send an email with attachment:$ mutt -s "Test mail" -a /tmp/file.tar.gz vivek@nixcraft.co.in < /tmp/mailmessage.txt
Where,
- vivek@nixcraft.co.in - is the recipient
- /tmp/mailmessage.txt - is the main body of the e-mail (read message from the file "mailmessage.txt")
- /tmp/file.tar.gz - is an attachment (with option -a)
- "Test mail" - is a subject line (option -s)
See also:
- Sample bash script to send an email
- mybackup script to backup selected files/directories and email them as .tar.gz file to your email account
- Metamail ftp://ftp.research.telcordia.com/pub/nsb/
Featured Articles:
- 20 Linux System Monitoring Tools Every SysAdmin Should Know
- 20 Linux Server Hardening Security Tips
- My 10 UNIX Command Line Mistakes
- The Novice Guide To Buying A Linux Laptop
- 10 Greatest Open Source Software Of 2009
- Top 5 Email Client For Linux, Mac OS X, and Windows Users
- Top 20 OpenSSH Server Best Security Practices
- Top 10 Open Source Web-Based Project Management Software
- Top 5 Linux Video Editor Software
Previous post: Linux: Burn multi session CDs on Linux
Next post: Security Comparison: Windows vs Linux
Privacy Policy | Terms of Service | Questions or Comments | Copyright Info | Sitemap
{ 77 comments… read them below or add one }
I didnt recieve any mail in my yahoo inbox when i tried to send the message from the command line using mutt
mutt -s “testmail” anugula_kiran@yahoo.co.in > /tmp/k
please i am eager to know about it
Check your bulk mail. I am using it and my emails when are sent out of the computer goes in the “from: www-data” so yahoo take the email as spam and if your settings in yahoo.com is to delete all spam then is deleting it. Try using another email a POP account. It will work like charm.
May be yahoo is blocking your email! It should work. If you are on PPP then it is high possiblity!
–
Vivek Gite
I can’t be sure, but it looks like you’re using the wrong directional switch. In your command use, you have “>”. I’m presuming you’re attempting to send the message in the file /tmp/k which means you should probably be using the “
In the command:
mutt -s “Test mail” -a /tmp/file.tar.gz vivek@nixcraft.co.in
Hey i was hunting 4 this info and found it via yahoo. This is easy than those crazy scripts… thx for good info in this blog.
thanks this blog is bookmarked now.
thanks, you made my day (or better, tomorow ) with this hint…
nice post worth to bookmark :)
thanks for this post!
How do I use MUTT to send multiple attachments in a single email?
Multiple attachments use -a for each ie:
mutt -s “Test Mail” -a attach1 -a attach2 -a attach3 vivek@nixcraft.co.in
Nice post thanks guys!
I just want learn more things in linux,
How do you send an e-mail to multiple recipients with mutt?
is the reading in of the text file required or can I type a one-line body from the command line?
This is a reply to message 12, regarding using “-a” to send multiple attachments in one email.
I use the same mutt command line in my script. My challenge is I can’t hard code the files with “-a”. I need to search for all logs, find out what they are and mutt them.
I need something like:
mutt -s “log files” -a *.log sue@homtmail.com < summary
How do I code “-a *.log”?
Reply to #17: Regarding how to use “-a” for an indeterminate number of attachments; here’s one way:
y=”"
for x in $(ls -1 *.log) ; do
y=”$y -a $x”
done
mutt -x “subject” $y myaddr@company.com < somefile
How do you send an e-mail to multiple recipients with mutt?
In reply to 19: Putting all addresses into quotes should work.
mutt -s “My message” -a attchmnt “address1 address2″
its working well in system which serve as proxy but not working from my desk. How to get it work in a proxy ed network ?
Thanks, I was searching for an hour for this! To do the equivalent with sendmail is crazy!
man mpack
Thank you!
worked like a charm for me, thanx guys :]
hi all, i am getting this error
mutt -s “Test Shell Mail” malath.alakeel@gmail.com < email
Error sending message, child exited 127 (Exec error.).
Could not send the message.
How to use mapck to send multiple files? i am able to send only one file with the command. Please help
See our FAQ:
Email multiple file attachment from Solairs / AIX / HP-UX UNIX/ Linux command line
HTH
Thanks
i am unable to send mail from shell .. getting an error /etc/postfic/main.cf no such file or directory ..pls help
I am unable to send an .htlm file as the mail body. When I use the command below, it mails the actual code.
mutt -s “Test Mail” user@uh.edu < mail_attachment.html
I can send it as an attachment and it comes through fine with this command:
mutt -s “Test Mail” -a mail_attachment.html user@uh.edu < mail_body.txt
the mail_body.txt does not contain anything. I just get the attachemnt. Sun system can e-mail it to Outlook as an .htlm mail.
Hmmm why all this reported succes, I seem to get it all wrong.
mutt -s “test Mail” -a /home/jesper/Y.tar gvzfs@yahoo.dk < t.txt
so where am I going wrong?
I am using a laptop with wireless connection. How do I specify “from”?
Is it possible to send specific text in the body of the mail, rather than sending the body from the attached file?
mutt -s “Test Mail” -a /home/test.txt user@abc.com < “TEXT BODY”
is it possible to set “from” option, becouse by default i getting from: root
i using command like:—
mutt -s ‘Test mail’ -a file.xls usernamel@domain.com < file
i want from option should become useranem who is giving mail to someone
you can use uuencode too. Here is an example I used for many years. How to extract,using bash/unix/linux shell scripting, the oracle data like excel report and …-> http://tinyurl.com/dbcy98
Sam,
if u want to send certian text in body instead of using a body file then go for this:
#> echo -e “This is the body message of the email” | mutt -a server.key raj@alpha.xion.com -s “This is the email subject”
Actually I am using proxy server to access internet
i did
export http_proxy=”http://10.100.100.172:3128/”
and
export http_proxy=http://10.100.100.172:3128/
to configure proxy
then
mutt -s “Test mail” -a /root/amritesh/rs.txt amriteshsmsc@gmail.com < /root/amritesh/gw.txt
to send mail but it wont work plz guide me what to do…?
in debian lenny:
mutt -s “subject” -a file1 file2 file3 — email@gmail.com < email-text.file
between attachments and recipients need to putt double dash and files for attachment with out anything
with out double dash wroute:
"Can't stat email@gmail.com: No such file or directory
email@gmail.com: unable to attach file."
because it's thinking that email@gmail.com it's one more attachemt file )))
Hope it's help you )))
“in debian lenny:
mutt -s “subject” -a file1 file2 file3 — email@gmail.com < email-text.file
between attachments and recipients need to putt double dash and files for attachment with out anything"
same for squeeze. thanks mate
Hi,
when i am sending a mail with pdf attachment thru mailx utility on MS Outlook than it wooks fine but whenver i am sending the same to rediff/gamil/yahoo than instead of pdf attachment it is sending junk characters,please advice.
uuencode xx_file.pdf xx_file.pdf| mailx –s “Subject of mail” “mail_id”
i am using the above command.
please suggets to do the same.
ram
Hi
This e-mail (mutt) utility looks very useful, I would like to use it on AIX, can any one let me know how I could install this utility on AIX and use it.
Thank you
Regards
Murali
if you want to send the contents of a text file from the shell prompt do the following.
# mail -s “subject of the mail” me@me.com < textfile.txt
What an excellent tool. I have been looking for something like this for ages!
How to specify “from name” when sending email thru mutt? I am using php cli to send email and I could only set the “from email”, and not the “from name”. Here is my php statement with mutt command:
shell_exec(“export EMAIL=\”from@email.com\”; echo ‘email text’ | mutt -s ‘email subject’ -a ‘/attachment/file.pdf’ to@email.com“);
When I ran this php program, the recepient receives email like this:
From: “My Real Name”
But I want “My Company Name” to show in the From: line. Where to specify this when running mutt ?
Hi,
I need a favor, I am using mutt command to send an email and everything is working fine, but as you know when email arrived to the proper person, the email is coming from internal name of the instance of the server (e.g From: XX@servername.companyname.extension), can we put an constanct alias for ‘from email account’, I mean from: payables@companyname.net for example. I think this is an internal linux parameters structure?
Thanks
Maroun
Hi Fun Nepali Games/ Maroun,
Use this command format to set the from name and the from email to whatever you want:
export EMAIL=’from name<from email address>’; echo ‘email body text‘ | mutt -a ‘attachment file‘ -s ‘subject‘ recipient address
Hope I helped! Greetings
Hi Ken, thank you for your help. I had come up with this syntax to fix my issue.
shell_exec(”export EMAIL=\”from@email.com\”; export REPLYTO=\”from@email.com\”; echo ‘email text’ | mutt -n -e ‘set envelope_from_address=\”from@email.com\”‘ -e ‘set realname=\”My Company Name\”‘ -s ‘email subject’ -a ‘/attachment/file.pdf’ to@email.com“);
Hi…
I am working on ubuntu. i did install mutt and when i typed mutt -s “hello” mymail@gmail.com in my terminal a nano editor came up and i manually had to proceed the process of sending the mail…finally it attached a file from my /tmp folder in which the contents were buffered and this file was sent…
i just want to automate the entire process without any human intervention…
Can someone please help me out in automating the entire process…
thanks
Thanks guys, with your help I did solve the problem
“Can’t stat email@gmail.com: No such file or directory
email@gmail.com: unable to attach file.”
How can you mutt only the newest file from a particular directory in a bash script?
hey nice thread, i got this working with from field set as I desire, from a shell script as follows:
${TARGETEMAIL}="target@protected"
export EMAIL="My Name "
export REPLYTO="email@protected"
echo "body text" | mutt -e 'set envelope_from' -a /filename.gif -s "subject" ${TARGETEMAIL}
(note, board munged code a bit, try again:
export EMAIL=”My Name “
attempt 3:
export EMAIL=”My Name”
eg. it is “My Name (less-than-sign)email@protected(greater-than-sign)”
Just spent a couple of hours working this out.
The mutt way to set the from address and name in mutt is ;
mutt -e "unmy_hdr from; my_hdr From: rmcdonald@supersize.com.au\"
-e "set realname=\"Ronald McDonald\" " \
-s "this is the subject line ... " \
-a attachmentfile.txt -a anotherFile.doc\
-- ttttoooo@toAddress.co.uk < bodyOfEmail.txt
Note that the -e “command” lets you do any set, unsets, or mutt configurations
———–
For the record, the other approaches to customising From addresses (and by extention other attributes) are as follows.
I have listed all the methods that mutt make available, though two of them don’t work.
————————————————————————–
Method 3 works, #2 half works, method #1 and 4 don’t work.
#from method #1
set use_envelope_from=yes
set envelope_from_address="muttrc@yourApparentDomain.co.uk"
# NOTE : use_from defaults to yes, so that mutt forces the from address
# ***THIS IS THE CAUSE OF PEOPLE GETTING myaccountname AS THEIR
# *** FROM ADDRESS
# from method #2 :
# use_from=no works. Now the MTA, e.g. ssmtp sets the from address
set use_from=no
# however, the set_from DOESNT WORK.
set from="set_from@yourApparentDomain.co.uk" # doesn't work
# from method #3
# this is the approach to use. See my command line example
# you must use the my_hdr to set a new from address. See 4
unmy_hdr from
my_hdr From:"fromEmailAddress@mydomain.info.us"
# from method #4 : let the MTA set the from address
# doesn't work. Mutt fails to remove the from header line.
unmy_hdr from
----------------------------------------
forgot to add, these are all edits to the /etc/Muttrc file, or your .muttrc equavalent
Thanks for the article, helped me a lot. (the sending part)
Cheers,
Yosi
Hi Friends…
I have a requiremnt where i need to send a mail with an attachement (pdf file) for the same i have written this code and it is getting executed without any error but still i am not receiving any mail. Please adive:
Following code is for you reference:
DATETIME=`date “+%Y%m%d%H%M%S”`
DATETIME1=`date “+%Y%m%d”`
REQUESTID=echo $1 | awk ‘{print $2}’ – | sed ‘s;FCP_REQID=;;’
USERPASS=echo $1 | awk ‘{print $3}’ – | sed ‘s;FCP_LOGIN=;;’ | sed ‘s;”;;g’
P_FILE_PATH=echo $1 | awk ‘{print $9}’ – | sed ‘s;”;;g’
P_FILE_NAME=echo $1 | awk ‘{print $10}’ – | sed ‘s;”;;g’
P_USER_EMAIL_ID=echo $1 | awk ‘{print $11}’ – | sed ‘s;”;;g’
FILE_SUB=echo $1 | awk ‘{print $12}’ – | sed ‘s;”;;g’
# “/oracle/apps/inst/apps/TEST_erpapts2/logs/appl/conc/out XXADIB_PO_STANDARD_467106_1.PDF temp1@adibdev.local testmail”
REQUESTID=123456
USERPASS=apps
P_FILE_PATH=/oracle/apps/inst/apps/TEST_erpapts2/logs/appl/conc/out
P_FILE_NAME=XXADIB_PO_STANDARD_467106_1.PDF
P_USER_EMAIL_ID=temp1@adibdev.local
FILE_SUB=testmail
echo “——————————————–”
echo “DatTime=” $DATETIME
echo “DATETIME1=” $DATETIME1
echo “REQUESTID=” $REQUESTID
echo “USERPASS=” $USERPASS
echo “——————————————–”
echo “param=” $1
echo “P_FILE_PATH=” $P_FILE_PATH
echo “P_FILE_NAME=” $P_FILE_NAME
echo “P_USER_EMAIL_ID=” $P_USER_EMAIL_ID
echo “——————————————–”
echo ” ”
echo “——————————————–”
EXIT_STATUS=0
echo $FILE_SUB
echo “——————————————–”
echo ” ”
echo “Just before sending mail..”
echo “EXIT_STATUS=” =$EXIT_STATUS
echo ” ”
echo “——————————————–”
if test $EXIT_STATUS = 0 ; then
echo “Success”
(echo “Please find the enclosed all vacancies and the details of vacacy statues. This is system generated email. Please do not reply.”;uuencode $P_FILE_PATH $FILE_SUB) | mailx -s “$FILE_SUB – on $DATETIME” $P_USER_EMAIL_ID
else
echo “Fail”
echo “——————————————–”
echo ” ”
echo “Un-successful run of the Error Log File”
echo ” ”
echo “——————————————–”
fi
echo “——————————————————-”
exit 0
(1) have you considered looking at the examples in this thread ?
(2) this thread is about mutt, and you are using mailx
(3) my example above shows how to send an email of any configuration, with any attachments, from the command line, using mutt
In general, do this :
add the
line /bin/bash -x
to the start of your scripts. NOTE THE -x
Then watch the output, it will show you all the assignments. You probably have made a mistake in one of your awk assignments.
Also don’t try to be smart, doing stuff like running multiple commands in a subshell (in brackets) and then piping the result to mailx. Instead do clear, seperate steps, and write temporary files, in testing AND PRODUCTION so you can investigate what is going on. I mean you haven’t even been able to narrow the problem down to the step that is going wrong.
The answer to why this isn’t working is that, probably, your don’t have a MTA running. mutt and mailx and manyothers just manage the generation of the email, you need a MTA (mail transfer agent) like ssmtp (simple, easy, great) or exim4 (not simple, fully featured)
—-in summary: —-
use /bin/bash -x
test each intermediate step
use mutt, and copy one of the examples above.
find where the error is BEFORE you post on a forum.
I type in this text “$ mutt -s “Test mail” -a msg.txt amgormandoyle@gmail.com < msn.txt" and i end up with "$" is not recognized yet when i use the sample code($ mutt -s "Test mail" -a /tmp/file.tar.gz vivek@nixcraft.co.in < /tmp/mailmessage.txt) it works except for the file not specified part which was expected
It’s an idiom: the “$” is used by some people to represent the prompt character In a terminal, shorthand for I-am-typing-in-a-terminal-here. I think that they use “$” to represent the root user, and # to represent the prompt of a normal user.
Just ignore it….
…. and the rest works … right ? … cool.
Depending on permissions, doesn’t have to be a root user,
The other way around. # means root, $ means a normal user.
Thank you for commenting however i’m begining to think that my computer doesn’t support mutt. Is this specifically for linux users because there is no mutt install link that works with my computer.
What operating system is your computer running Edmund?
Ubuntu 10.04 mutt bug – add “–” after attachment, even only one file.
https://bugs.launchpad.net/ubuntu/+source/mutt/+bug/457940
Thank you Vivek. This came handy when I realized that I didn’t have the sharutils package (for uuencode) installed and so could not use mailx/uuencode combination. Anyway, the “-a” option of mutt is better than mailx/uuencode.
Hey, thanks, I needed to send a quick mail and your tip worked like a charm — except I needed to send two attachments and mutt required a — before the destination. Thanks!
Hi,
Recently I have installed Linux Ubuntu on my Laptop and was trying some command line to send emails. I do not know what package needs to be installed but same command is working fine at my work place which has Unix AIX machine.
For example this syntax is working at my work place but not working on my Ubuntu command prompt.
(echo “test”;) | mail -r from_address@gmail.com -s “Send Email ” to_address@gmail.com
Can somebody please advice what do I need to do if I want to use these above options.
Thanks in Advance
I am not able to send more than ~7Mb (+ headers info which become in a 9.9 Mb file size). How can I increase the attachment size sent via mutt?. I’ve looking at the conf file and I didn’t see any line where the ~10 Mb file size attachments were set by default. I really need to increase this thing at least 25 Mb to send database backups to my email account (which supports 50 Mb attachments).
Is it zipped?
Yes, I forgot to mention it’s a file compressed with LZMA algorithm which is the highest compression level around. My server OS is Linux/RedHat. I just need to know if mutt is capable to send bigger than ~10 MB attachment, the current backup file that I am getting is about ~7 Mb but with headers it just become into a 10 Mb. As I said I research about it, I read the config file and nothing yet.
Appreciate your help.
Ha Ha Ha ! excuse me, Not laughing at you but that was just a suggestion, you obviously kno much more than me.
Actually I was looking at the wrong place. The attachment size limit is not controlled by mutt else the smpt server itself, in my case postfix.
If somebody is having this same issue, just go the postfix config file at /etc/postfix/main.cf (on RedHat based kernels) and look for this directive: message_size_limit (or add it to the end if it’s not in there) and just increase the value to: message_size_limit = 20480000 (20 MB for example).
Hope that helps.
can this run as a portable application from a UNC path
Is it possible to specify a different name for an attachment than the actual file name? For instance, we have many programs the call the mutt command and send files with extensions that our recipient’s PCs don’t recognize. It would be nice to be able to rename the attachment in mutt without having to actually modify the source file.
Thanks,
Martin
How do I use a Variable Subject. For example:
This always hangs and thus fails. But typing-in the same string where $mySUBJECT is works fine. Could someone tell me what I'm doing wrong?
Thanks!
Answered my own question!
Need to use Single Quotes rather than Double Quotes around $mySUBJECT. For example this works:
Hope it helps someone!
The mutt program is super cool this line is part of a script I did that make a backup of all my SQL Server Info and send it to my email. Because I have a High protection for Spam this email always go to junk. I also got a POP3 account in my work and there I have no problem also I receive it in my iPhone 3GS. This is the hell of a tool. THanks for sharing this with us.