-1

だから私は次のコードを持っています:

  while(list($i, $data_subscriber) = each($subscriber)) {

     $email_counter = $i + 1;
     echo ($email_counter).') '.$data_subscriber->field_1.' '.$data_subscriber->field_2.' - '.$data_subscriber->email.''."\n";
     flush();

     $language = $data_subscriber->lang;

     $body_mail = include($template_send_newsletter);

     $first_name_idx = $data_subscriber->field_1;
     $last_name_idx = $data_subscriber->field_2;

     if (mail_send(strtolower($data_subscriber->email),
                   ( IsSet($first_name_idx) && IsSet($last_name_idx) ? $first_name_idx.' '.$last_name_idx : $data_subscriber->email ),
                   $site_admin,
                   $site_name,
                   'Newsletter ['.date('d/m/Y', time()).']',
                   true,
                   $body_mail,
                   NULL,
                   false)) {

       reset($data_subscriber->newsletter_item);
       unset($log_detail);
       $log_detail = "";
       while(list($j, $list_of_news_to_send) = each($data_subscriber->newsletter_item)) {
         $log_detail = ( IsSet($list_of_news_to_send->title) ? $list_of_news_to_send->title."\n" : '');
         $log_detail = ( IsSet($list_of_news_to_send->subtitle) ? $list_of_news_to_send->subtitle."\n" : '');
         $log_detail = ( IsSet($list_of_news_to_send->creation_date) ? $list_of_news_to_send->creation_date."\n" : '');
         $log_detail = "\n";
       } /* end while */

       write_newsletter_detail($data_subscriber->id_subscription,
                               $data_subscriber->email,
                               'Y',
                               $log_detail);
     }
     else {
       write_newsletter_detail($data_subscriber->id_subscription,
                               $data_subscriber->email,
                               'N',
                               NULL);
     } /* end if mail_send */

   } /* end while */

そして、次の関数

function mail_send($rcpt_to,           
                   $to_name,                 
                   $mail_from,                
                   $from_name,                
                   $subject,          
                   $isHTML = true,            
                   $body,                     
                   $attachment = NULL,        
                   $direct_delivery = false,
                   $reply_to = NULL){

    $mail = new PHPmailer;
    $mail->isSMTP();
    $mail->SMTPDebug = 3;
    $mail->Debugoutput = 'html';
    $mail->Host = 'smtp.gmail.com';
    $mail->Port = 587;
    $mail->SMTPSecure = 'tls';
    $mail->SMTPAuth = true;
    $mail->Username = "mail@domain.com";
    $mail->Password = "password";
    $mail->Timeout = 3600;
    $mail->addAddress(trim($rcpt_to), trim($to_name));
    $mail->setFrom($mail_from,$from_name);
    $mail->Subject = $subject;
    $mail->Body = $body;

    if ($isHTML) {
      $mail->IsHTML(true);
      $mail->AltBody = strip_tags($mail->Body);
    } 
    if (IsSet($attachment)) {
      $mail->AddAttachment($attachment['tmp_name'], $attachment['name']);
    }
    if (IsSet($reply_to)) {
      $mail->AddReplyTo($reply_to);
    }
    if (!$mail->send()) {
        return false;
    } else {
        return true;
    }
  }

PHPMailer を使用して、gmail SMTP サーバーを使用して複数の電子メールを送信しています。ニュースレターを送信するために、異なるがほぼ同じコードを含む 4 つのファイルがあります。私のファイルの 1 つは、すべてのメールを (~60 受信者) に送信しています。ここで問題が発生します。電子メールの半分が送信され、残りは送信されません。スクリプトを実行しても、今回は少数の受信者に対して、最初に電子メールを受信しなかった場合、送信しています。

独自のドメインで GMAIL を使用しています。だから私は限界を超えていません。

この問題の原因は何ですか? 何か案は ?ありがとうございました。

アップデート**

SERVER -> CLIENT: 454 4.7.0 Too many login attempts, please try again later. e11sm950198edd.68 - gsmtp

いくつかの電子メールが送信された後、このエラーが表示されます。理由はありますか?

アップデート***

  $mail = new PHPMailer;
  $mail->isSMTP();
  $mail->SMTPDebug = 3;
  $mail->Host = 'smtp.gmail.com';
  $mail->SMTPAuth = true;
  $mail->SMTPKeepAlive = true; // SMTP connection will not close after each email sent, reduces SMTP overhead
  $mail->Port = 465;
  $mail->SMTPSecure = 'ssl';
  $mail->Username = "domain@domain.com";
  $mail->Password = "password";
  $mail->setFrom($site_noreply, $site_name);
  $subjectnewsletter = 'Newsletter ['.date('d/m/Y', time()).']';
  $mail->Subject = $subjectnewsletter;
  $mail->AltBody = 'To view the message, please use an HTML compatible email viewer!';

  reset($subscriber);
  while(list($i, $data_subscriber) = each($subscriber)) {
   $email_counter = $i + 1;
   echo ($email_counter).') '.$data_subscriber->field_1.' '.$data_subscriber->field_2.' - '.$data_subscriber->email.''."\n";
   flush();
   $language = $data_subscriber->lang;
   $first_name_idx = $data_subscriber->field_1;
   $last_name_idx = $data_subscriber->field_2;
   $fullname = $first_name_idx.' '.$last_name_idx;

   $bodymail = include($template_send_newsletter);
   $mail->msgHTML($bodymail);
   $mail->addAddress($data_subscriber->email, $fullname);
   reset($data_subscriber->newsletter_item);
   unset($log_detail);
   $log_detail = "";
   while(list($j, $list_of_news_to_send) = each($data_subscriber->newsletter_item)) {
     $log_detail = ( IsSet($list_of_news_to_send->title) ? $list_of_news_to_send->title."\n" : '');
     $log_detail = ( IsSet($list_of_news_to_send->subtitle) ? $list_of_news_to_send->subtitle."\n" : '');
     $log_detail = ( IsSet($list_of_news_to_send->creation_date) ? $list_of_news_to_send->creation_date."\n" : '');
     $log_detail = "\n";
   } /* end while */
   if (!$mail->send()) {
     write_newsletter_detail($data_subscriber->id_subscription,
                             $data_subscriber->email,
                             'N',
                             NULL);
       echo $mail->ErrorInfo;
       break; //Abandon sending
   } else {

     write_newsletter_detail($data_subscriber->id_subscription,
                             $data_subscriber->email,
                             'Y',
                             $log_detail);
       echo "Message sent";
   }
   $mail->clearAddresses();
   $mail->clearAttachments();
  } /* end while */

コードを変更して、電子メールごとにsmtpサーバーに接続しないようにしました。しかし、93通のメールを送信した後、次のエラーが表示されます。

SMTP server error: MAIL FROM command failed
4

2 に答える 2