2013-03-15 68 views
0

以下是我對在Perl發送HTML電子郵件的代碼如何得到響應(成功或失敗),而在Perl發送HTML郵件

use strict; 
use warnings; 

use Email::Sender::Simple qw(sendmail); 
use Email::Sender::Transport::SMTP(); 
use Email::Simple(); 
use Email::Simple::Creator(); 
use Email::MIME::CreateHTML; 


my $smtpserver = 'xxx.xxx.xx'; 
my $smtpport = 25; 
my $smtpuser = '[email protected]'; 
my $smtppassword = 'xxxx'; 

my $transport = Email::Sender::Transport::SMTP->new({ 
    host => $smtpserver, 
    port => $smtpport, 
    sasl_username => $smtpuser, 
    sasl_password => $smtppassword, 
}); 


my $html ="<div>Success</div>"; 
my $plain_text ="plain text"; 

my $email = Email::MIME->create_html(
     header => [ 
       From => '[email protected]', 
       To => '[email protected]', 
       Subject => 'Test Mail', 
     ], 
     body => $html, 
     text_body => $plain_text 
); 

sendmail($email, { transport => $transport }); 

其工作fine.Now我需要找到的響應郵件發送。

爲我修改了代碼爲

eval { 
sendmail($email, { transport => $transport }); # this is try catch method 
}; 
if ([email protected]) { 
     # where [email protected] is a object of Email::Sender::Failure 
    print [email protected]>message; 
    print"\n"[email protected]>code ; 

}else{ 
print "success"; 
} 

現在讓我知道,有沒有更好的方式來實現這一目標?

回答

0

兩件事情可以改善你的代碼。

首先,儘可能快地採取[email protected]的副本(如果您在處理錯誤時做了某些操作,則會更改[email protected]的值)。

if (my $e = [email protected]) { 
    print $e->message; 
    print"\n" . $e->code; 
} 

其次,這也是值得考慮像Try::Tiny一個模塊,這將使你的異常處理代碼看上去有點更好。

try { 
    sendmail($email, { transport => $transport }); 
} catch { 
    # Exception is in $_ 
    print $_->message; 
    print"\n" . $_->code; 
}