2013-12-18 22 views
0

我對perl相當陌生,我怎樣才能讓主題行顯示在我的代碼下面的電子郵件中?現在它只發送出主題行的電子郵件。如何將主題行包含到perl電子郵件腳本中?

收件人收到一封電子郵件,具體取決於與其電子郵件帳戶相匹配的郵政編碼,如下面的代碼所示。

此外,當它發送一封包含該數據的電子郵件時,電子郵件@符號不能正確顯示。我怎樣才能解決這個問題?

感謝

#!/usr/bin/perl 

print "Content-type: text/html\n\n"; 
%form=&parse_form(); 
$other_email=&lookup($form{'zipcode'}); 
$subject = 'Test Email'; 
$body= 
"Customer Name: $form{'name'}\n". 
"Customer Phone: $form{'phone'}\n". 
"Customer Email: $form{'email'}\n". 
"Customer Zip: $form{'zipcode'}\n"; 

mailsend('[email protected]',$body) and print "<b>Thank You!</b><br>\n"; 
mailsend($form{'email'},$body) and print "<b>Your email has been sent.</b><br>\n"; 
mailsend($other_email,$body) and print "<b>Please hit back to exit this page.</b><br>\n"; 

#helper functions 
sub lookup { 
    $contents=`cat postcodes.txt`; 
    ($result)=$contents=~m/\b$_[0]=(.*)\b/; 
    print "<b>Corresponding email address for zip $_[0] was [$result]</b><br>\n"; 
    return $result; 
} 

sub mailsubject { 
$subject = 'Test Email'; 
} 

sub mailsend { 
    open(MAIL, "|/usr/sbin/sendmail -t"); 
    print MAIL "To: $_[0]\n\n"; 
    print MAIL "See email below!\n\n"; 
    print MAIL "$_[1]\n"; 
    print MAIL "Thank you\n"; 
    close(MAIL); 
    return true; 
} 

sub parse_form { 
    ($hash{'name'}) = $ENV{'QUERY_STRING'}=~/name=(.*?)&/; 
    ($hash{'phone'}) = $ENV{'QUERY_STRING'}=~/phone=(.*?)&/; 
    ($hash{'email'}) = $ENV{'QUERY_STRING'}=~/email=(.*?)&/; 
    ($hash{'zipcode'}) = $ENV{'QUERY_STRING'}=~/zipcode=(.*?)&/; 
    return %hash; 
} 
+1

您的編輯刪除了您之前的問題,並詢問完全不同的問題,使您的問題的所有早期答案變得毫無意義。如果您想要詢問後續問題或新問題,請在此網站上創建一個新問題。 – mob

+0

@符號在電子郵件中顯示爲「%40」。任何想法如何解決? –

+0

如果您使用了CGI.pm中的參數解析功能,那麼將會爲您處理'%40'轉換。 –

回答

3

你只需要添加一個額外的標頭的主題:

sub mailsend { 
    my ($recip, $subject, $body) = @_; # <- extract into variables 

    open(MAIL, "|/usr/sbin/sendmail -t"); 
    print MAIL "To: $recip\n"; 
    print MAIL "Subject: $subject\n"; # <- added Subject line 
    print MAIL "\n";     # end of headers 
    print MAIL "See email below!\n\n"; 
    print MAIL "$body\n"; 
    print MAIL "Thank you\n"; 
    close(MAIL); 

    return true; 
} 

這似乎是一個很多額外的工作,因爲已經有上CPAN一個Perl模塊,流程電子郵件以更簡單的方式:MIME:Lite

+1

所有標題需要在'\ n \ n'之前去 – mob

+0

我試過了,它沒有在電子郵件中放置主題行..它只是將它添加到電子郵件的正文? –

+0

@mob提到所有頭文件都需要放在'\ n \ n'之前,我錯過了。 –

1

如果您能夠使用外部模塊,使用電子郵件::簡單和電子郵件::發件人將允許您不需要rei修復輪子:

use strict; 
use Email::Sender::Simple qw(sendmail); 
use Email::Simple; 
use Email::Simple::Creator; 

sub mailsend { 
    my ($to, $subject, $body) = @_; 
    my $email = Email::Simple->create(
     header => [ 
      To  => $to, 
      From => '"My Script" <[email protected]>', 
      Subject => $subject, 
     ], 
     body => $body, 
    ); 
    sendmail($email); 
} 
+0

我不想使用這些,但感謝您的建議。 –

+0

你爲什麼不想使用這些?如果忽略大部分功能(如CPAN),使用Perl有什麼意義? –

相關問題