Beefy Boxes and Bandwidth Generously Provided by pair Networks
laziness, impatience, and hubris
 
PerlMonks  

Re: getting SMTP failure codes

by e5z8652 (Novice)
on Feb 05, 2010 at 00:26 UTC ( #821479=note: print w/ replies, xml ) Need Help??


in reply to getting SMTP failure codes

OK, here's a partial success:

#test_mail.pl use Net::SMTP; use Net::Cmd; $smtp = Net::SMTP->new( Host => '192.168.55.173', Debug => 1, ); $smtp -> mail("root\@test-server.my.home"); @good = $smtp -> recipient('good_address@my.home','bad_address@my.home +',{ SkipBad => 1, Notify => ['FAILURE']}); $mess = $smtp->message(); $smtp -> data(); $smtp -> datasend("TO: good_address@my.home\n"); $smtp -> datasend("TO: bad_address@my.home\n"); $smtp -> datasend("SUBJECT: Test e-mail from root\n"); $smtp -> datasend("\n"); $smtp -> datasend("A test message.\n"); $smtp -> dataend(); print "These addresses went: @good\n"; print "Status of last address: $mess\n"; $smtp -> quit();

Which outputs the following:

These addresses went: good_address@my.home Status of last address: 5.1.1 User unknown

But that only works if the bad address is the last one in the list. (OK, that's fine for some cgi scripts I have that only accept one e-mail address.) But how to get each result dynamically?


Comment on Re: getting SMTP failure codes
Select or Download Code
Re^2: getting SMTP failure codes
by chuckbutler (Priest) on Feb 05, 2010 at 01:42 UTC

    My only improvement would be to loop on the call to 'recipient( )' and capture the results yourself. Please see below. 'recipient( )' does this internally, anyway. Good luck. -c

    #test_mail.pl use Net::SMTP; use Net::Cmd; $smtp = Net::SMTP->new( Host => '192.168.55.173', Debug => 1, ); die "Did not connect to host..." unless defined($smtp); #you can remo +ve this, so it would die w/ your address $smtp -> mail("root\@test-server.my.home"); @good = (); @bad = (); @mess = (); foreach $toadr (('good_address@my.home','bad_address@my.home')) { if ($smtp -> recipient( $toadr,{ SkipBad => 0, Notify => ['FAILURE +']})) {; #make result boolean, 1 ::= good push( @good, $toadr ); } else { push( @bad, $toadr ); push( @mess, $smtp->message() ); } } $smtp -> data(); $smtp -> datasend("TO: good_address@my.home\n"); $smtp -> datasend("TO: bad_address@my.home\n"); $smtp -> datasend("SUBJECT: Test e-mail from root\n"); $smtp -> datasend("\n"); $smtp -> datasend("A test message.\n"); $smtp -> dataend(); print "These address(es) went: @good\n"; print "These address(es) were bad \[ and why \]:\n"; for (0..$#bad) { print "$bad[$_] \[ $mess[$_] \]\n"; } $smtp -> quit();

      For some reason I was thinking that if I looped on them that it would take longer. But I timed it and the results are about the same (at least on my network & mail server). If recipient() is doing the same thing, then of course it wouldn't matter. (And I should have been able to figure that out from the debug output anyway!)

      So populating an array with the addresses, and then running a foreach loop on the array of addresses would get me where I want to go.

      Thanks for the clue!

        How do i run this script on a root, i mean what command to use
        How do i run this script on a root ?
        #test_mail.pl use Net::SMTP; $smtp = Net::SMTP->new( Host => '192.168.55.173', Debug => 1, ); $smtp -> mail("root\@test-server.my.home"); @good = $smtp -> recipient('good_address@my.home','bad_address@my.home +',{ SkipBad => 1, Notify => ['FAILURE']}); $smtp -> data(); $smtp -> datasend("TO: good_address@my.home\n"); $smtp -> datasend("TO: bad_address@my.home\n"); $smtp -> datasend("SUBJECT: Test e-mail from root\n"); $smtp -> datasend("\n"); $smtp -> datasend("A test message.\n"); $smtp -> dataend(); print "These addresses went: @good\n"; $smtp -> quit();

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://821479]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others cooling their heels in the Monastery: (10)
As of 2014-07-29 18:35 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    My favorite superfluous repetitious redundant duplicative phrase is:









    Results (226 votes), past polls