SendMail in Perl


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting SendMail in Perl
# 1  
Old 08-19-2005
SendMail in Perl

I am writing a web program that uses SendMail. Here is a snippet of the code:
open(SENDMAIL, "| /usr/lib/sendmail -t")
print SENDMAIL <<EMAIL_MESSAGE;
From: $FROM;
To: $TO;
Subject: $SUBJECT
$BODY
EMAIL_MESSAGE
close(SENDMAIL);
exit 1;

Is there someway that I can capture if sending the email was successfull? I am thinking something along the line of the PERL DBI eval function. Any help will be highly appreciated!
Dave
# 2  
Old 08-19-2005
Now you need to be aware that sending mail in your snippet involves purely invoking an external sendmail executable to send the mail for you. So the only direct way you can check the status is by its return value.

I'm not sure about what sendmail return values will provide (let alone availability of other sendmail clones such as qmail or postfix which may vary in behaviour WRT this). But I think sendmail's return value is not any much useful. Don't forget sendmail does not send the mail immediately but queued it for delivery so the sendmail process will immediately return without waiting for delivery. That is, mail sending with sendmail is an asynchronous operation so there is not much status indication you can get, beyond obvious misconfigurations such as the sendmail executable is not found which may get trapped! So probably, the sendmail return value is always 0 (successful) so you don't have much to tell from it (and so it will nearly always be successful so eval() won't work).

With a programming mind, I generally recommend this method:

(1) Generate mail with an additional header with an ID that your program can use to identify the message. e.g.

X-MsgID: 20050820000001

Note that custom headers should start with 'X-'. We need a custom message ID because we cannot get the actual message ID as we send it, so we need to embed our own.

Save information about this mail with this message ID in some persistent storage (such as database or files) that allows you to, say, associate this message with a particular application activity that triggers this message.

(2a) At sendmail, capture the return mail by redirecting incoming mail to a program (setting /etc/mail/aliases or similar) instead of to mailbox. The program will be invoked with the return mail content. In the program, you can extract the message ID from the custom ID we inserted. Then we know the mail cannot be sent (or deferred for later retry).

(2b) Some others who have no say over mail server configuration may read the destination mailbox (through POP3 for instance) instead.

(3) Some people may even want to extract the actual message ID for extracting the relevant record from /var/log/maillog. But I usually tend to think this is too much of a trouble.

This is a lot of programming. So are there existing modules you can use to help out a little bit? Probably yes. You may want to think about this:

http://search.cpan.org/~freeside/Mai...ounceParser.pm

I haven't used it before so I'm not sure if it's good. From the POD it seems to do the most important part of the trick though.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Programming

PERL: In a perl-scripttTrying to execute another perl-script that SETS SOME VARIABLES !

I have reviewed many examples on-line about running another process (either PERL or shell command or a program), but do not find any usefull for my needs way. (Reviewed and not useful the system(), 'back ticks', exec() and open()) I would like to run another PERL-script from first one, not... (1 Reply)
Discussion started by: alex_5161
1 Replies

2. Solaris

Clarifying sendmail configuration - sendmail-client offline

Hi all, I have read about sendmail running as 2 separate process. 1 as a MSP, and the other as the real daemon or MTA. In my current configuration, the sendmail-client is disabled. Both submit.cf and sendmail.cf are left as default untouch I do not specified any mailhost... (3 Replies)
Discussion started by: javanoob
3 Replies

3. UNIX for Advanced & Expert Users

Sendmail questions, SCO 5.0.6 sendmail 8.11.0

I am running SCO 5.0.6 and using sendmail 8.11.0 and having issues with smtp authentication. When trying to send mail the following message will kick back. (reason: 530 5.7.1 Authentication required) 530 5.7.1 Authentication required Not sure what needs to be tweeked in sendmail.cf but I... (1 Reply)
Discussion started by: ziggy6
1 Replies

4. UNIX for Dummies Questions & Answers

run a perl.script upon receiving an email in Sendmail

Hi All I am newbie with Sendmail and Linux in general. We use sendmail for outgoing and incoming mails. Once our server receives a certain email xxx@yyy.com we would like to run a PERL script doing some task wiht it. Can you address me a little bit on that topic? In order to do that the... (0 Replies)
Discussion started by: manustone
0 Replies

5. Shell Programming and Scripting

Perl: Sendmail - Permission denied

Hi, I'm trying to write a simple mail handler perl script for a website I'm working on. I've managed to installed sendmail yesterday, and I'm currently trying to get the script to work. I'm getting an error however. Here's the block of perl code I'm using: open(MAIL, "| $sendmailpath -t")... (7 Replies)
Discussion started by: LNC
7 Replies

6. Solaris

sendmail.cf

when mailing from server sender address showing in this format: username@hostname.oops.co.uk What changes are required to remove the hostname from the senders address. Solaris 9 thanks :) (5 Replies)
Discussion started by: smcart
5 Replies

7. UNIX for Advanced & Expert Users

sendmail

When I try to use mailx on AIX 5.2 I get the following message: "The flags you gave make no sense since you're not sending mail." The type of command sent is as follows: mailx -s "Test" -c gilstanden@hotmail.com < sendmail.pid but it just gives the message referenced previously. Do I need to... (1 Reply)
Discussion started by: gstanden
1 Replies

8. UNIX for Dummies Questions & Answers

Sendmail

I have a Sendmail (Red Hat 9.0, Sendmail 8.12.8-4)server set up on the local network. I am able to send mail just fine, and when I copy error messages from the root mail account to my test user, I can download those to Outlook just fine. My problem is that I cannot send messages to my testaccount... (2 Replies)
Discussion started by: Jody
2 Replies

9. UNIX for Dummies Questions & Answers

sendmail.cf

Dear All , I have Linux Red Hat 6.1 , and i have sendmail (8.11.6 ) . i have big problem with spammers , i was looking in sendmail.cf configuration file and i saw this option , i tried it but it failed : the option is : # file containing known spammers by email,domain,ip Kjunk hash... (1 Reply)
Discussion started by: tamemi
1 Replies

10. UNIX for Dummies Questions & Answers

sendmail

What is teh command to run sendmail in the normal operation mode for Red Hat 7.1? Thanks. (1 Reply)
Discussion started by: kara
1 Replies
Login or Register to Ask a Question