認証の問題で立ち往生しています。PHP を使用して、外部 SMTP サーバー (Microsoft Exchange 2010 を実行) 経由でメールを送信したいと考えています。telnet セッション内でメールを送信すると、正常に動作します。
telnet mail.myweb.com 25
Trying 100.200.300.400...
Connected to mail.myweb.com.
Escape character is '^]'.
220 mail.myweb.com SMTP Service ready
AUTH LOGIN
334 VXNlcm5hbWU6
bXlzZWNyZXR1c2VybmFtZQ==
334 UGFzc3dvcmQ6
bXlzZWNyZXRwYXNz
235 Authentication successful
MAIL FROM:user1@myweb.com
250 <user1@myweb.com> ... Sender ok
RCPT TO:fakeuser@fakeweb.com
250 Requested mail action okay, completed.
DATA
354 Start mail input; end with <CR><LF>.<CR><LF>
SUBJECT:test email
"test data"
.
250 Requested mail action okay, completed.
しかし、Pear Mail コードを試すと、認証に失敗します。これはデバッグ応答です:
DEBUG: Recv: 220 mail.myweb.com SMTP Service ready
DEBUG: Send: EHLO localhost
DEBUG: Recv: 500 Syntax error, command unrecognized
DEBUG: Send: HELO localhost
DEBUG: Recv: 250 Requested mail action okay, completed.
DEBUG: Send: RSET
DEBUG: Recv: 250 Requested mail action okay, completed.
authentication failure [SMTP: SMTP server does not support authentication (code: 250, response: Requested mail action okay, completed.)]
DEBUG: Send: QUIT
DEBUG: Recv: 221 mail1.myweb.com closing transmission channel
これが PHP コードです。
<?php
require_once "Mail.php";
$from = "user1@myweb.com";
$to = "fakeuser@fakeweb.com";
$subject = "Hi!";
$body = "Hi,\n\nHow are you?";
$host = "mail.myweb.com";
$port = "25";
$username = "mysecretusername";
$password = "mysecretpass";
$headers = array ('From' => $from,
'To' => $to,
'Subject' => $subject);
$smtp = Mail::factory('smtp',
array ('host' => $host,
'port' => $port,
'debug' => true,
'auth' => true,
'username' => $username,
'password' => $password));
$mail = $smtp->send($to, $headers, $body);
if (PEAR::isError($mail)) {
echo("<p>" . $mail->getMessage() . "</p>");
} else {
echo("<p>Message successfully sent!</p>");
}
?>
PHP コードは他の SMTP サーバーで動作するため、Pear Mail では問題ありません。ユーザー名/パスは問題ありません。何が悪いのか考えはありますか?