2010-10-30 295 views
0

我正在用Perl編寫一個簡單的郵件客戶端,它使用SMTP登錄郵件服務器,並從那裏發送郵件到另一個電子郵件地址(在不同的主機上)。我使用原始的SMTP命令,因爲草莓perl沒有附帶SASL.pm,這是驗證所需的。但是,當腳本嘗試自我驗證時,它會失敗。我嘗試了'AUTH LOGIN'和'AUTH PLAIN'機制,但沒有運氣。下面是一個例子:SMTP身份驗證問題

EHLO example.com 
AUTH LOGIN 
YWxwaGE= 
cGFzc3dvcmQ= 
MAIL FROM:<[email protected]> 
RCPT TO:<[email protected]> 
DATA 
Subject: sample message 
From: [email protected] 
To: [email protected] 

Greetings, 
Typed message (content) 
Goodbye. 
. 
QUIT 
EOT 

「YWxwaGE =」, 「cGFzc3dvcmQ =」 是在Base64編碼的用戶和口令。無論我提交服務器,總會抱怨用戶名或密碼錯誤。我做錯了什麼?

回答

2

爲什麼不直接安裝一個支持SMTP和SASL的模塊? Strawberry Perl的一個優點是你可以很容易地從CPAN安裝模塊。

例如,Email::SimpleEmail::Sender

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

my $email = Email::Simple->create(
    header => [ 
    To  => '[email protected]', 
    From => '[email protected]', 
    Subject => "sample message", 
    ], 
    body => "Greetings,\nTyped message (content)\nGoodbye.\n", 
); 

my $transport = Email::Sender::Transport::SMTP->new({ 
    host => 'smtp.example.com', 
    sasl_username => 'foo', 
    sasl_password => 'bar', 
}); 

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

我想你的代碼 - 仍然沒有運氣。 – 2010-10-31 10:07:19

+0

沒關係,我解決了這個問題:) – 2010-10-31 11:16:02