クライアントに自動メールを送信するために CakePHP を使用しています。うまく機能していますが、一部の受信者がメールを受信していないようです。そこで、SMTP オプションを使用して電子メールを送信し、Media Temple の電子メール プロバイダーを介して電子メールをルーティングすることにしました。ただし、Media Temple アカウントからメールを送信しようとすると、「550- リレーは許可されていません」というエラーが表示されます。どうやら、Media Temple サーバーが単純にメールの送信を許可していないようです。私が使用しているユーザー名とパスワードが正しいことを確認し、macmail クライアントと iPhone メール クライアントから SMTP 経由でメールを送信できることを確認したため、これは奇妙です。Cakephp でまったく同じ構成の gmail アカウントを使用して SMTP 経由でメールを送信できるため、cakephp のメール設定が正しいことも確認しました。なぜ私が' このエラーが発生し、それを解決する方法は? ありがとう
電子メールの送信を処理するコードは次のとおりです。このクラスは、通常の EmailComponent と同じように、さまざまなコントローラー内から使用します。
class CanadafindsEmailerComponent extends EmailComponent
{
...
function send($content = null, $template = null, $layout = null) {
if(!in_array(TECHY_MONITOR_EMAIL,$this->bcc) && is_array($this->bcc))
$this->bcc[]=TECHY_MONITOR_EMAIL;
else if (!in_array(TECHY_MONITOR_EMAIL,$this->bcc) && !is_array($this->bcc))
$this->bcc=array(TECHY_MONITOR_EMAIL);
if(DEVSITE){//commented-out code are settings for smtp with gmail, which works fine
$this->delivery = 'smtp';
$this->smtpOptions = array(
'port'=>'465',//'465',
'timeout'=>'30',//'30',
'auth' => true,
'host' => 'ssl://mail.thenumber.biz',//'ssl://smtp.gmail.com',
'username'=>USERNAME,//'USERNAME@gmail.com',
'password'=>SMTP_PASSWORD//,
);
$this->to=$this->correctFormatOn($this->to);
$this->bcc=$this->correctFormatOn($this->bcc);
$this->cc=$this->correctFormatOn($this->cc);
$this->replyTo=$this->correctFormatOn($this->replyTo);
$this->from=$this->correctFormatOn($this->from);
}
return parent::send($content,$template,$layout);
}
function correctFormatOn(&$email){
if(is_array($email)){
$copiedEmail=array();
foreach($email as $singleEmail){
$copiedEmail[]=$this->correctFormatOnSingle($singleEmail);
}
$email=$copiedEmail;
}else{
$email=$this->correctFormatOnSingle($email);
}
return $email;
}
function correctFormatOnSingle(&$email){
$subEmails=explode(",",$email);
$fixedSubEmails=array();
foreach($subEmails as $subEmail){
$fixedSubEmails[]=preg_replace('/<?([^< ]+)@([^>,]+)[>,]?/i', '<$1@$2>', trim($subEmail));
}
$email=implode(",",$fixedSubEmails);
return $email;
}
}