Проблема аутентификации SMTP - PullRequest
0 голосов
/ 31 октября 2010

Я пишу простой почтовый клиент на Perl, который использует SMTP для входа на почтовый сервер и оттуда отправляет почту на другой адрес электронной почты (на другом хосте). Я использую сырые команды SMTP, потому что клубничный Perl не поставляется с SASL.pm, который необходим для аутентификации. Однако, когда скрипт пытается аутентифицировать себя, он терпит неудачу. Я попробовал механизм «AUTH LOGIN» и «AUTH PLAIN», но не повезло. Вот пример:

EHLO example.com
AUTH LOGIN
YWxwaGE=
cGFzc3dvcmQ=
MAIL FROM:<alpha@example.com>
RCPT TO:<beta@betadomain.com>
DATA
Subject: sample message
From: alpha@example.com
To: beta@betadomain.com

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

"YWxwaGE =", "cGFzc3dvcmQ =" - это пользователь и пароль, закодированные в Base64. Что бы я ни отправлял, сервер всегда жалуется, что либо имя пользователя, либо пароль неверны. Что я делаю не так?

1 Ответ

2 голосов
/ 31 октября 2010

Почему бы просто не установить модуль, поддерживающий SMTP с SASL?Одним из преимуществ Strawberry Perl является то, что вы можете легко устанавливать модули из CPAN.

Например, Email :: Simple и Email :: 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      => 'beta@betadomain.com',
    From    => 'alpha@example.com',
    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 });
...