Трудности при работе с SMTP через phpmailer

23.09.2014

Есть новая статья: Класс для отправки писем через SMTP используя phpmailer

Чаще всего это проблемы связаны с портами и сертификатами.
Приведу простой пример кода, для отправки писем через почту на яндексе (smtp.yandex.ru)

 
<?

  class cSOMailer
  {
    function __construct()
    {
      date_default_timezone_set('Europe/Moscow');

      require_once('class.phpmailer.php');
    }
    
    function goMail($Email, $sTitle, $sMSG)
    {
      $mail                = new PHPMailer();
      $mail->IsSMTP();
      $mail->SMTPAuth      = true;
      $mail->SMTPKeepAlive = true;
      //$mail->SMTPDebug = 1;
      //- $mail->SMTPSecure = "tls";
      $mail->SMTPSecure = "ssl";

      $mail->Host          = 'smtp.yandex.ru';
      //-$mail->Port          = 587;
      $mail->Port          = 465;
      $mail->Username      = 'noreply@test.ru';
      $mail->Password      = 'PASS';
      $mail->SetFrom('noreply@test.ru');


      //$mail->CharSet = 'Windows-1251';
      $mail->CharSet = 'UTF-8';

      $mail->Subject = $sTitle;
      $mail->MsgHTML( $sMSG );

      $aEmails = explode(',', $Email);
      if (is_array($aEmails))
      {
        foreach($aEmails as $sEmail)
        {
          $sEmail = trim($sEmail);
          $mail->AddAddress( $sEmail );
          $sError .= "<br/>\n $sEmail: ".$sEmail;
        }
      }
      else
      {
        $sEmail = trim($aEmails);
        $mail->AddAddress( $sEmail );
        $sError .= "<br/>\n $sEmail: ".$sEmail;
      }

/*
    if($attachment) {
        if(is_array($attachment)) {
            foreach($attachment as $fname) {
                $mail->AddAttachment($fname);
            }
        } else {
            $mail->AddAttachment($attachment);
        }
    }

    if($attachment_img) {
        if(is_array($attachment_img)) {
            foreach($attachment_img as $fname) {
                $mail->AddEmbeddedImage($fname[0],$fname[1]);
            }
        } else {
            $mail->AddEmbeddedImage($attachment_img[0],$attachment_img[1]);
        }
    }
*/



      if(!$mail->Send())
      {
        $bRet = FALSE;
      }
      else
      {
        $bRet = TRUE;
      }
      $mail->ClearAddresses();
      $mail->ClearAttachments();

      return $bRet;
    }
  }

?>

Внимание! Если ящик яндекса был создан, но в него еще не заходили через веб интерфейс (для финального шага регистрации), то отправка по SMTP работать не будет!


Категории: Web
Яндекс.Метрика