crontab mutt email fails to be sent - cron

I have a crontab which is supposed to send an email, but it doesn't.
echo " ok backup " > /home/nuvoshift01/zDB-backup-start.txt
mysqldump --opt --user=q --password=xyz --host=localhost giladparking > /home/nuvoshift01/GPmonthly-DBdump.sql
mutt me#gmail.com -s "MySQL BackUp" -a /home/nuvoshift01/GPmonthly-DBdump.sql < /home/nuvoshift01/zDB-backup-start.txt > /home/nuvoshift01/whatHappened.txt
touch /home/nuvoshift01/zDB-bacup-end.txt
(1) the first line does touch the file as coded
(2) the back up file is created
(3) the mutt mail does not send
(4) the 4th line does touch the file as coded
if I issue the mutt command from the command the email IS sent with the attachment
my puzzle/question is: why doesn't the email get sent by the crontab?

OK, today I provide the solution to my own problem. I determined to send the email with mutt I needed to create a properly configured .muttrc file AND explicitly describe the path in the cron task.
my .muttrc file looks like this :
set from = "anyaddress#anydomain.com"
set hostname = hostname.com
set envelope_from = yes
the mutt command needs to look like this:
mutt -F /home/user/.muttrc -s "SUBJECT" any#address.com -a /home/user/attachedfile.txt < /home/user/bodyofmessage.txt
It turns out the message will likely end up in the spam folder of the recipient.
A special thank you for Major Hayden at Rack Space for his assistance behind the scenes.

Related

Shell script to send email is not working from Informatica

I have a very simple script
echo "Test email body" | mailx -s "Subject" vinay#informatica.com
When I run the script from linux, it's working fine and I'm receiving the email
But, when I use the same script in post session success command or command task in informatica, the script is successful but I did not receive the mail
Also, without calling the script, I directly gave the mail command in post session success command
echo "Test email body" | mailx -s "Subject" vinay#informatica.com
Still, it's not working.
Can someone help me on this.
touch email.txt > you message
cat /tmp/email.txt
Subject: Terminal Email Send
Email Content line 1
Email Content line 2

Linux shell emailing - set sender address using "mail" command

I am using the "mail" command in Linux shell to send an email when programmatically prompted to do so. I am using
mail -s 'subject' recipient#theirhost.com <<< 'Email body'
to send it at present, but this does not include a sender address. Instead, the system uses the account name as the sender address. I've seen the claim that "-aFrom:myname#myhost.com" should work, but -a is being interpreted as an attachment attempt, not a header change. This results in the error: "From:Mynamemyname#myhost.com: No such file or directory". I've also seen a claim that this works:
-r "from#fromserver.com"
But the OS doesn't even know what that means, in my case.
Is there a way to make this work without additional software? I don't need a from name, but a from address would be very helpful.
Note: let's consider ssmtp, mutt, and other such add-on software unavailable. Attempting to install and use such software would be problematic.
Thank you!
Edit 1: I'm not certain how to check what version of "mail" I have. With some difficulty, I got it to spit out the usage, which is as follows.
-T FILE -u USER -h hops -r address -s SUBJECT -a FILE -q FILE -f FILE -A ACCOUNT -b USERS -c USERS -S OPTION users
Never mind, I got it. "-r" can actually work.
I successfully used:
echo "This is the message body" | mail -s "This is the Subject" -r "FromName<fromAddress#example.com>" recipientName#example.com
It looks like karakfa was onto something also, as I do have mailx available to me also, but it looks like I won't be needing that for this use case.
Thank you!

Mutt failing as cron job with 'Couldn't lock /sent'

I have a bash script which picks up files from /tmp and emails them to me. I run this script as root and it works perfectly but I am trying to get this automated with crontab.
Added the job to crontab, again running as root, and now I get 'Couldn't lock /sent'.
I managed to confirm it's using the file in /root by changing it's name in Muttrc and tried permission at 600 and 777.
(Also getting an error Segmentation fault, hoping that will go away if I fix the above.)
Anyone any ideas why Mutt is different as a cron job with the same user and the same file.
I simplified the script as follows and is doing exactly the same, works from root shell, but not in crontab.
error:-
Couldn't lock /sent
/data/mediators/email_file: line 5: 1666 Segmentation fault mutt $email -s "test" -i /tmp/test.txt < /dev/null
email_file script:-
#!/bin/bash
email=——#——.com
mutt $email -s "test" -i /tmp/test.txt < /dev/null
crontab:-
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=——#—-.com
HOME=/
54 02 * * * root /data/mediators/email_file
I also added printenv to the job and compared to a server where this runs OK. The difference is that the working system has USER=root, whereas the non-working one does not show this variable as being set.
The issue is combination of HOME=/ env variable in crontab and default mutt record configuration which defaults to ~/sent.
mutt stores sent emails in the record file. So choose whether you want to keep them (fix crontab's env var HOME or set mutt's record to meaningful value.
Add this option to mutt command in email_file If you want to set it:
-e 'set record=/root/sent'
or unset it with:
-e 'unset record'
You can find more in man pages muttrc(5)
record
Type: path
Default: “~/sent”
This specifies the file into which your outgoing messages should be appended. (This is meant as the primary method for saving a copy of your messages, but another way to do this is using the “my_hdr” command to create a “Bcc:” field with your email address in it.)
The value of $record is overridden by the $force_name and $save_name variables, and the “fcc-hook” command. Also see $copy and $

Linux mail command to bcc multiple addresses?

I am using linux mail command to send an automated email to a bunch of people once per week.
I want each one of the recipients to be BCC'ed.
I am trying this command:
mail -v -s "Email Subject" -b george#gmail.com, maria#email.com, gina#correo.com, asher#texting.com -- -f jpatino#azucarcolombia.com < /pathTo/dir/emailText.txt
But get this error:
You must specify direct recipients with -s, -c, or -b.
you need to put them all in a single argument by quoting it.
mail -v -s "Email Subject" -b 'george#gmail.com, maria#email.com, gina#correo.com, asher#texting.com' -- -f jpatino#azucarcolombia.com < /pathTo/dir/emailText.txt
It seems there are multiple versions of the mail command.
mail (GNU Mailutils) 3.7 has an append option to add headers and values directly without piping them in. Just add the headers you need there, e.g. bcc:
echo "Just testing my sendmail" | mail -s "Sendmail test" test#to.com --append=Bcc:test#bcc.com,other#bcc.com
How to send mail through BCC in UNIX

Specify the from user when sending email using the mail command

Does anyone know how to change the from user when sending email using the mail command? I have looked through the man page and can not see how to do this.
We are running Redhat Linux 5.
You can specify any extra header you may need with -a
$mail -s "Some random subject" -a "From: some#mail.tld" to#mail.tld
http://www.mindspill.org/962 seems to have a solution.
Essentially:
echo "This is the main body of the mail" | mail -s "Subject of the Email" recipent_address#example.com -- -f from_user#example.com
mail -r from#from.from -R from#from.com
-r = from-addr
-R = reply-to addr
The author has indicated his version of mail doesn't support this flag. But if you have a version that does this works fine.
When sending over SMTP, the mail man page advises to set the from variable, in this way (Tested on CentOS 6):
mail -s Subject -S from=sender#example.com recipient#example.com
You could also attach a file using the -a option:
mail -s Subject -S from=sender#example.com -a path_to_attachement recipient#example.com
None of these worked for me (Ubuntu 12.04) but finally with trial & error I got:
echo 'my message blabla\nSecond line (optional of course)' |
mail -s "Your message title"
-r 'Your full name<yourSenderAdress#yourDomain.abc>'
-Sreplyto="yourReplyAdressIfDifferent#domain.abc"
destinatorEmail#destDomain.abc[,otherDestinator#otherDomain.abc]
(all in one line, there is no space in "-Sreplyto")
I got this mail command from:
apt-get install mailutils
You can append sendmail options to the end of the mail command by first adding --. -f is the command on sendmail to set the from address. So you can do this:
mail recipient#foo.com -- -f sender#bar.com
None of the above worked for me. And it took me long to figure it out, hopefully this helps the next guy.
I'm using Ubuntu 12.04 LTS with mailutils v2.1.
I found this solutions somewhere on the net, don't know where, can't find it again:
-aFrom:Servername-Server#mydomain.com
Full Command used:
cat /root/Reports/ServerName-Report-$DATE.txt | mail -s "Server-Name-Report-$DATE" myemailadress#mydomain.com -aFrom:Servername-Server#mydomain.com
Here's a solution.
The second easiest solution after -r (which is to specify a From: header and separate it from the body by a newline like this
$mail -s "Subject" destination#example.com
From: Joel <joel#example.com>
Hi!
.
works in only a few mail versions, don't know what version redhat carries).
PS: Most versions of mail suck!
on CentOs5: -r from#me.omg
echo "This is the main body of the mail" | mail -s "Subject of the Email" recipent_address#example.com -- -f from_user#example.com -F "Elvis Presley"
or
echo "This is the main body of the mail" | mail -s "Subject of the Email" recipent_address#example.com -aFrom:"Elvis Presley<from_user#example.com>"
Most people need to change two values when trying to correctly forge the from address on an email. First is the from address and the second is the orig-to address. Many of the solutions offered online only change one of these values.
If as root, I try a simple mail command to send myself an email it might look like this.
echo "test" | mail -s "a test" me#noone.com
And the associated logs:
Feb 6 09:02:51 myserver postfix/qmgr[28875]: B10322269D: from=<root#myserver.com>, size=437, nrcpt=1 (queue active)
Feb 6 09:02:52 myserver postfix/smtp[19848]: B10322269D: to=<me#noone.com>, relay=myMTA[x.x.x.x]:25, delay=0.34, delays=0.1/0/0.11/0.13, dsn=2.0.0, status=sent (250 Ok 0000014b5f678593-a0e399ef-a801-4655-ad6b-19864a220f38-000000)
Trying to change the from address with --
echo "test" | mail -s "a test" me#noone.com -- dude#thisguy.com
This changes the orig-to value but not the from value:
Feb 6 09:09:09 myserver postfix/qmgr[28875]: 6BD362269D: from=<root#myserver.com>, size=474, nrcpt=2 (queue active)
Feb 6 09:09:09 myserver postfix/smtp[20505]: 6BD362269D: to=<me#noone>, orig_to=<dude#thisguy.com>, relay=myMTA[x.x.x.x]:25, delay=0.31, delays=0.06/0/0.09/0.15, dsn=2.0.0, status=sent (250 Ok 0000014b5f6d48e2-a98b70be-fb02-44e0-8eb3-e4f5b1820265-000000)
Next trying it with a -r and a -- to adjust the from and orig-to.
echo "test" | mail -s "a test" -r dude#comeguy.com me#noone.com -- dude#someguy.com
And the logs:
Feb 6 09:17:11 myserver postfix/qmgr[28875]: E3B972264C: from=<dude#someguy.com>, size=459, nrcpt=2 (queue active)
Feb 6 09:17:11 myserver postfix/smtp[21559]: E3B972264C: to=<me#noone.com>, orig_to=<dude#someguy.com>, relay=myMTA[x.x.x.x]:25, delay=1.1, delays=0.56/0.24/0.11/0.17, dsn=2.0.0, status=sent (250 Ok 0000014b5f74a2c0-c06709f0-4e8d-4d7e-9abf-dbcea2bee2ea-000000)
This is how it's working for me. Hope this helps someone.
This works on Centos7
echo "This is the main body of the mail" | mail -s "Subject of the Email" -r seneder_address#whatever.com recipent_address#example.com
Here's an answer from 2018, on Debian 9 stretch.
Note the -e for echo to allow newline characters, and -r for mailx to show a name along with an outgoing email address:
$ echo -e "testing email via yourisp.com from command line\n\nsent on: $(date)" | mailx -r "Foghorn Leghorn <sender#yourisp.com>" -s "test cli email $(date)" -- recipient#somedomain.com
Hope this helps!
For CentOS here is the working command :
mail -s Subject -S from=sender#example.com recipient#example.com
Thanks to all example providers, some worked for some not.
Below is another simple example format that worked for me.
echo "Sample body" | mail -s "Test email" from=sender-addrs#example.com recepient-addres#example.com

Resources