JoomlaWebサイト内での電子メール送信のエンドツーエンドテストを実行するための小さなスクリプトを作成しました。
$testMailer =& JFactory::getMailer();
$testMailer->setSender(SENDER);
$testMailer->addReplyTo(SENDER);
$testMailer->addRecipient(TEST_EMAIL);
$subject = 'Automatic test '.md5(uniqid());
$testMailer->setSubject($subject);
$testMailer->setBody('This message is automatically retrieved. Please ignore.');
?>
<h2>Testing Joomla email sending functionality</h2><?php
flush();
if ($testMailer->Send() !== true) {
echo '<p>ERROR - Mail Sending failed</p>';
}else{
echo '<p>Email sent...</p>';
flush();
$sleep = 5;
$progress = 0;
$max = 300;
set_time_limit($max+30);
$found = 0;
$mbox = imap_open(TEST_IMAP_SERVER, TEST_EMAIL, TEST_PASSWORD);
if (!$mbox){
echo '<p>ERROR - Login to '.TEST_EMAIL.' failed</p>';
foreach (imap_errors() as $error){
echo '<p>'.$error.'</p>';
}
die();
}else{
while (!$found && $progress < $max){
$result = imap_search($mbox, 'SUBJECT "'.$subject.'"');
foreach($result as $msgno) {
$headers = imap_fetchheader($mbox, $msgno);
if ($headers){
echo '<p>OK - EMail received</p>';
imap_delete($mbox,$msgno);
$found = 1;
die();
}
}
}
if (!$found){
$progress+=$sleep;
echo '<p>Waiting '.$sleep.' seconds to try again...('.$progress.' seconds total wait)</p>';
flush();
sleep($sleep);
}
}
if (!$found){
echo '<p>ERROR Giving up after '.$max.' seconds</p>';
}
}
このスクリプトは私のloal開発マシンから正常に機能し、メッセージの送信を一貫して検出します。
ライブサイトはAmazonEC2サーバー上にあります。最初は、異常なログインアクティビティの警告がありました。スクリプトが既知であり、10分以内に再実行されたことを確認しました。
それ以降、スクリプトはログインできますが、imap_searchはメッセージを検出しません。ただし、受信トレイには届きます。開発サイトのスクリプトは引き続き正常に機能します。
AmazonサーバーのTelnetも機能しています
telnet imap.gmail.com 993
Trying 74.125.133.108...
Connected to gmail-imap.l.google.com.
Escape character is '^]'.
何か案は?