私は CakePHP の email クラスを 1 年近く使用しています。システムは問題なく HTML メールを送信しています。2 日前、顧客が通知を受け取っていないという報告を受けました。管理者からの通知を受け取っていないことにも気付きました。
私の最初の考えは、サーバー (GoDaddy がホスト) で何かが変わったということでした。PHP の raw mail() 関数をテストし、CakePHP のクラスを介して簡単なテキスト メールを送信したので、それが私のホスティング プロバイダーだとは思いません。各デバッグ モードとエラー ログもテストしましたが、エラーが発生したことを示すものは何もありませんでした。これは、数日前から(成功して)使用しているコードです。このコードは、アプリ全体で約 10 回同じです。
$Email = new CakeEmail();
$Email->template('order_status_change', 'default')
->emailFormat('html')
->to($order['Order']['email'])
->subject('blah blah ' . $order['Order']['id'] . ' status change: ' . $status['Status']['label'])
->from(array('myemail@gmail.com' => 'blah blah'))
->viewVars(array(
'id' => $order['Order']['id'],
'firstName' => $order['Order']['first_name'],
'statusLabel' => $status['Status']['label'],
'statusDescr' => $status['Status']['description']
))
->send();
注意すべき点がいくつかあります。
- HTMLテンプレート「order_status_change」とデフォルトのレイアウトが正しいフォルダーにあることを確認しました(以前は機能していました)
- メールの時点で変数がすべて正しく設定されていることを確認しました
テキストメールに切り替える必要がある場合はそうしますが、コードが突然機能しなくなる方法を理解できないようです. 私が変更した唯一のことは、デバッグモードです (最初から行っています)。
アップデート
メールが使えなくなったので、テキストメールに切り替えました。ただし、何らかの奇妙な理由で、本文に URL を入力すると ( http://www.google.comなど)、メールが失敗します。ただし、.com だけを削除すると、通過します。一体何が起こっているのですか?
更新 2
これは、リンクを含まないテキスト メールを送信する現在の構成です (リンクと言うときは、URL 文字列を意味します)。
class EmailConfig {
public $godaddy = array(
'transport' => 'Smtp',
'host' => 'relay-hosting.secureserver.net',
'port' => 25,
'timeout' => 300,
'log' => true,
'charset' => 'utf-8',
'headerCharset' => 'utf-8'
);
}
Go Daddy は認証不要で、ポートは 25 であることを確認しました。