Beefy Boxes and Bandwidth Generously Provided by pair Networks
"be consistent"
 
PerlMonks  

Net::SMTP Problem

by joshe (Initiate)
on Jun 04, 2010 at 19:02 UTC ( [id://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

Replies are listed 'Best First'.
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);
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"; } }

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
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?Last hourOther CB clients
Other Users?
Others drinking their drinks and smoking their pipes about the Monastery: (4)
As of 2024-04-18 00:24 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found