Резервные SMTP-серверы с phpmailer

Я использую gmail как мой smtp-сервер с phpmailer ().

$mail->Host= "ssl://smtp.gmail.com" 

Как я могу указать отдельный smtp-сервер так же, как резервное копирование, если соединение с gmail не выполняется?

Ознакомьтесь с этим учебным пособием: http://www.web-development-blog.com/archives/send-e-mail-messages-via-smtp-with-phpmailer-and-gmail/

И перейдите в раздел: Advanced setup with fall-back SMTP server

Сначала добавьте переменные для резервного почтового сервиса, например:

 define('SMTPUSER', 'you@yoursmtp.com'); // sec. smtp username define('SMTPPWD', 'password'); // sec. password define('SMTPSERVER', 'smtp.yoursmtp.com'); // sec. smtp server 

Затем мы модифицируем функцию отправки почты, чтобы включить наш план резервного копирования.

 function smtpmailer($to, $from, $from_name, $subject, $body, $is_gmail = true) { global $error; $mail = new PHPMailer(); $mail->IsSMTP(); $mail->SMTPAuth = true; if ($is_gmail) { $mail->SMTPSecure = 'ssl'; $mail->Host = 'smtp.gmail.com'; $mail->Port = 465; $mail->Username = GUSER; $mail->Password = GPWD; } else { $mail->Host = SMTPSERVER; $mail->Username = SMTPUSER; $mail->Password = SMTPPWD; } $mail->SetFrom($from, $from_name); $mail->Subject = $subject; $mail->Body = $body; $mail->AddAddress($to); if(!$mail->Send()) { $error = 'Mail error: '.$mail->ErrorInfo; return false; } else { $error = 'Message sent!'; return true; } } 

И, наконец, используйте нашу новую функцию, используя нашу резервную копию (путем передачи $is_gmail = false ) только при необходимости.

 $msg = 'Hello World'; $subj = 'test mail message'; $to = 'to@mail.com'; $from = 'from@mail.com'; $name = 'yourName'; if (smtpmailer($to, $from, $name, $subj, $msg)) { echo 'Yippie, message send via Gmail'; } else { if (!smtpmailer($to, $from, $name, $subj, $msg, false)) { if (!empty($error)) echo $error; } else { echo 'Yep, the message is send (after doing some hard work)'; } } 

Пример кода был взят из учебника, приведенного выше.

Не нужно для всей этой тяжелой работы, она встроена в PHPMailer. Когда вы устанавливаете хост, просто добавьте более одного в список с разделителями с запятой (вы также можете указать параметры безопасности в одно и то же время), например:

 $mail->Host = 'tls://smtp.gmail.com:587;tls://smtp2.gmail.com;ssl://mail.example.net:465'; 

PHPMailer попробует их всех в установленном порядке, прежде чем сдаться. Убедитесь, что вы используете довольно недавнюю версию PHPMailer, поскольку в более ранних версиях были ошибки в этой области.