Устранение ошибки SMTP 504 при отправке электронного письма с вложениемPhp

Кемеровские программисты php общаются здесь
Ответить Пред. темаСлед. тема
Гость
 Устранение ошибки SMTP 504 при отправке электронного письма с вложением

Сообщение Гость »

Описание: я обнаружил ошибку 504 при попытке отправить электронное письмо с вложением с использованием SMTP через SSL (порт 465). Однако при отправке электронных писем без вложений или использовании настройки локального хоста ошибок не возникло. Я подозреваю, что проблема может быть связана либо с моим кодом, либо с конфигурацией сервера. Может ли кто-нибудь помочь мне решить эту проблему?
Предварительное исследование:
  • Проверил состояние SMTP-сервера, чтобы убедиться он работает.
  • Проверена действительность и установка сертификата SSL/TLS.
  • Проверены настройки брандмауэра, чтобы убедиться, что исходящие соединения через порт 465 разрешены.
  • Подтверждены учетные данные, используемые для аутентификации SMTP. p>
  • Проверил размер вложения, чтобы убедиться, что он не превышает ограничения сервера.

    < li>Проверена конфигурация кода для настроек SMTP, включая имя хоста, порт, метод шифрования и аутентификацию.
  • Включена отладка/вход в систему код для сбора подробной информации о связи SMTP.
  • Проверено отправку электронных писем с вложениями с использованием разных почтовых клиентов или библиотек.
  • Проверены журналы SMTP-сервера на наличие сообщений об ошибках или предупреждений.
  • Рассмотрено использование альтернативный SMTP-сервер для устранения проблем совместимости.
Вопрос: Ошибка 504 при отправке электронных писем с вложениями через SMTP Вероятно, SSL вызван проблемами с конфигурацией моего кода или настройкой сервера?

Код: Выделить всё

 public function send_email($to, $subject, $message, $from = null, $from_name = null, $attachment = null, $cc = null, $bcc = null)
{
list($user, $domain) = explode('@', $to);
if ('tecdiary.com' != $domain || DEMO) {
$result = false;
$this->load->library('tec_mail');
try {
$result = $this->tec_mail->send_mail($to, $subject, $message, $from, $from_name, $attachment, $cc, $bcc);
} catch (\Exception $e) {
$this->session->set_flashdata('error', 'Mail Error: ' .  $e->getMessage());
throw new \Exception($e->getMessage());
}
return $result;
}
return false;
}
tec_mail

Код: Выделить всё

class Tec_mail
{
public function __construct()
{
}

public function __get($var)
{
return get_instance()->$var;
}

public function send_mail($to, $subject, $body, $from = null, $from_name = null, $attachment = null, $cc = null, $bcc = null)
{
// $mail = new PHPMailer;
$mail          = new PHPMailer(true);
$mail->CharSet = 'UTF-8';
try {

$mail->isSMTP();
$mail->Host     = 'smtp.gmail.com';
$mail->SMTPAuth = true;
$mail->Port     = 465;
$mail->Username = '';
$mail->Password = '';

if (DEMO) {

$mail->isSMTP();
$mail->Host     = 'smtp.gmail.com';
$mail->SMTPAuth = true;
$mail->Port     = 465;
$mail->Username = '';
$mail->Password = '';

// $mail->SMTPDebug = 2;
} elseif ($this->Settings->protocol == 'mail') {
$mail->isMail();
} elseif ($this->Settings->protocol == 'sendmail') {
$mail->isSendmail();
} elseif ($this->Settings->protocol == 'smtp') {
$mail->isSMTP();
$mail->Host       = $this->Settings->smtp_host;
$mail->SMTPAuth   = true;
$mail->SMTPSecure = !empty($this->Settings->smtp_crypto) ? $this->Settings->smtp_crypto : false;
$mail->Port       = $this->Settings->smtp_port;
if (isset($this->Settings->smtp_oauth2)) {
$email        = $this->Settings->smtp_user;
$clientId     = $this->config->item('client_id');
$clientSecret = $this->config->item('client_secret');
$refreshToken = $this->config->item('refresh_token');

$this->mail->AuthType = 'XOAUTH2';

$provider = new Google(['clientId' => $clientId, 'clientSecret' => $clientSecret]);

$this->mail->setOAuth(new OAuth([
'provider'     => $provider,
'clientId'     => $clientId,
'clientSecret' => $clientSecret,
'refreshToken' => $refreshToken,
'userName'     => $email,
]));
} else {
$mail->Username = $this->Settings->smtp_user;
$mail->Password = $this->Settings->smtp_pass;
}
} else {
$mail->isMail();
}

if ($from && $from_name) {
$mail->setFrom($from, $from_name);
$mail->addReplyTo($from, $from_name);
} elseif ($from) {
$mail->setFrom($from, $this->Settings->site_name);
$mail->addReplyTo($from, $this->Settings->site_name);
} else {
$mail->setFrom($this->Settings->default_email, $this->Settings->site_name);
$mail->addReplyTo($this->Settings->default_email, $this->Settings->site_name);
}

$mail->addAddress($to);
if ($cc) {
try {
if (is_array($cc)) {
foreach ($cc as $cc_email) {
$mail->addCC($cc_email);
}
} else {
$mail->addCC($cc);
}
} catch (\Exception $e) {
log_message('info', 'PHPMailer Error: ' . $e->getMessage());
}
}
if ($bcc) {
try {
if (is_array($bcc)) {
foreach ($bcc as $bcc_email) {
$mail->addBCC($bcc_email);
}
} else {
$mail->addBCC($bcc);
}
} catch (\Exception $e) {
log_message('info', 'PHPMailer Error: ' .  $e->getMessage());
}
}
$mail->Subject = $subject;
$mail->isHTML(true);
$mail->Body    = $body;
$mail->AltBody = strip_tags($mail->Body);

if ($attachment) {
if (is_array($attachment)) {
foreach ($attachment as $attach) {
$mail->addAttachment($attach);
}
} else {
$mail->addAttachment($attachment);
}
}

if (!$mail->send()) {
log_message('error', 'Mail Error: ' . $mail->ErrorInfo);
throw new Exception($mail->ErrorInfo);
}
return true;
} catch (MailException $e) {
log_message('error', 'Mail Error: ' . $e->getMessage());
throw new \Exception($e->errorMessage());
} catch (\Exception $e) {
log_message('error', 'Mail Error: ' . $e->getMessage());
throw new \Exception($e->getMessage());
}
}
}

Подробнее здесь: https://stackoverflow.com/questions/781 ... attachment
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Php»