Beefy Boxes and Bandwidth Generously Provided by pair Networks
Do you know where your variables are?
 
PerlMonks  

Net::SMTP Problem

by joshe (Initiate)
on Jun 04, 2010 at 19:02 UTC ( #843188=perlquestion: print w/ replies, xml ) Need Help??
joshe has asked for the wisdom of the Perl Monks concerning the following question:

Fellow Monks: please help with this. I have this code to send email from script to a list of email address:



sub sendtextemail { use MIME::Lite; $from = "\"$from_name\" <$from_email>\n"; $sender = "\<$reply_1>\n"; $reply = "\"$from_name\" <$from_email>\n"; $to = "\"$fname\" <$email>\n"; $unsubscribe .="<$shortlink/r.cgi?s=$subid&a=$username&k=$valkey>\n"; use Net::SMTP; MIME::Lite->send('smtp', 'localhost'); $mailmsg = MIME::Lite->new( From => $from, 'Reply-to' => $reply, Sender => $sender, To => $to, Subject => $subjectline, Type => "text/plain; charset=iso-8859-1", "X-Identifier:" => "$subid-$username\n", "X-Ip:" => "$ip\n", Data => "$message", ); $mailmsg->add("Complaints-To" => "$emailabuse\n"); + $mailmsg->send; }

The problem is when it enconter a bad email, stop the procces with this error:


SMTP recipient() command failed: <myname@gmail..com>: domain missing or malformed

How i can do to skip the bad address without stop the process?

Many thanks

Comment on Net::SMTP Problem
Select or Download Code
Re: Net::SMTP Problem
by jettero (Monsignor) on Jun 04, 2010 at 19:09 UTC
    See eval and use something like if( !eval{blarg()} ) { warn "hrm: $@" }. Also, consider something like Email::Valid to avoid the send step on bad addresses.

      Dear jettero:

      Thanks for your fast reply, i am a completly monkey and newbie, can you give a example please

      thanks

        Below example shows how to incorporate eval into the code you already have. jettero's method to wrap the subroutine gives you the added benefit of trapping other errors as well. But if you are just concerned about not failing for bad domains the below code (untested) should work.

        sub sendtextemail { use MIME::Lite; $from = "\"$from_name\" <$from_email>\n"; $sender = "\<$reply_1>\n"; $reply = "\"$from_name\" <$from_email>\n"; $to = "\"$fname\" <$email>\n"; $unsubscribe .="<$shortlink/r.cgi?s=$subid&a=$username&k=$valkey>\n"; use Net::SMTP; MIME::Lite->send('smtp', 'localhost'); $mailmsg = MIME::Lite->new( From => $from, 'Reply-to' => $reply, Sender => $sender, To => $to, Subject => $subjectline, Type => "text/plain; charset=iso-8859-1", "X-Identifier:" => "$subid-$username\n", "X-Ip:" => "$ip\n", Data => "$message", ); $mailmsg->add("Complaints-To" => "$emailabuse\n"); eval { $mailmsg->send; }; if ($@) { print "[Error] Your email send errored: [$@]\n"; } }

Re: Net::SMTP Problem
by Khen1950fx (Canon) on Jun 05, 2010 at 01:43 UTC
    How i can do to skip the bad address without stop the process?

    Try "SkipBad" from Net::SMTP. I would try it like this:

    #!/usr/bin/perl use strict; use warnings; use MIME::Lite; my $msg = MIME::Lite->new('your stuff here'); MIME::Lite->send( 'smtp', 'localhost', Debug => 1, SkipBad => 1 ); $msg->print(\*STDOUT);

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others meditating upon the Monastery: (9)
As of 2014-08-23 14:47 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The best computer themed movie is:











    Results (174 votes), past polls