Как установить количество попыток повторной отправки письма с помощью PHPMailer?

Пользователь

от rodger.botsford , в категории: PHP , год назад

Как установить количество попыток повторной отправки письма с помощью PHPMailer?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от lilla.herman , год назад

@rodger.botsford 

Для установки количества попыток повторной отправки письма с помощью PHPMailer, вы можете использовать свойство SMTPAutoTLS и метод setSMTPAutoTLS().


Вот пример кода:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
isSMTP();
$mail->Host = 'smtp.gmail.com';
$mail->SMTPAuth = true;
$mail->Username = '[email protected]';
$mail->Password = 'password';
$mail->SMTPSecure = 'tls';
$mail->SMTPAutoTLS = false; // Отключение автоматической попытки использования TLS
$mail->Port = 587;

$mail->setFrom('[email protected]', 'Sender Name');
$mail->addAddress('[email protected]', 'Recipient Name');

$mail->Subject = 'Testing PHPMailer';
$mail->Body = 'This is a test email';

$retryAttempts = 3; // Устанавливаем количество попыток повторной отправки
$attempt = 1;

while (!$mail->send() && $attempt <= $retryAttempts) {
    echo 'Attempt ' . $attempt . ' failed. Retrying...' . PHP_EOL;
    $attempt++;
}

if ($mail->send()) {
    echo 'Email sent successfully';
} else {
    echo 'Failed to send email';
}


В этом примере мы используем цикл while для повторной отправки письма в случае неудачной попытки. Переменная $attempt хранит текущую попытку, и она увеличивается с каждой неудачной попыткой до достижения указанного количества попыток, заданного переменной $retryAttempts. Если письмо удалось отправить, мы выводим "Email sent successfully". Если после всех попыток отправить письмо не удалось, выводим "Failed to send email".

Пользователь

от mona_terry , 5 месяцев назад

@rodger.botsford 

Этот код имеет некоторые недостатки. Во-первых, при каждой неудачной попытке отправки письма создается новое соединение с SMTP-сервером, что может вызвать дополнительные нагрузки на сервер. Вместо этого, рекомендуется установить количество попыток в настройках SMTP-соединения как часть конфигурации PHPMailer. Вот пример более оптимального подхода:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
$mail = new PHPMailer();
$mail->isSMTP();
$mail->Host = 'smtp.gmail.com';
$mail->SMTPAuth = true;
$mail->Username = '[email protected]';
$mail->Password = 'password';
$mail->SMTPSecure = 'tls';
$mail->Port = 587;

$mail->SMTPOptions = array(
    'ssl' => array(
        'verify_peer' => false,
        'verify_peer_name' => false,
        'allow_self_signed' => true
    )
);

$retryAttempts = 3; // Устанавливаем количество попыток повторной отправки
$mail->SmtpRetries = $retryAttempts; // Устанавливаем количество попыток прямо в объекте PHPMailer

$mail->setFrom('[email protected]', 'Sender Name');
$mail->addAddress('[email protected]', 'Recipient Name');

$mail->Subject = 'Testing PHPMailer';
$mail->Body = 'This is a test email';

if ($mail->send()) {
    echo 'Email sent successfully';
} else {
    echo 'Failed to send email';
}


В этом коде устанавливается свойство SmtpRetries в объекте PHPMailer, которое устанавливает количество попыток отправки письма. Теперь PHPMailer будет автоматически повторять отправку письма заданное количество раз, если первая попытка не удалась.