Предварительное исследование:
- Проверил состояние SMTP-сервера, чтобы убедиться он работает.
- Проверена действительность и установка сертификата SSL/TLS.
- Проверены настройки брандмауэра, чтобы убедиться, что исходящие соединения через порт 465 разрешены.
- Подтверждены учетные данные, используемые для аутентификации SMTP. p>
- Проверил размер вложения, чтобы убедиться, что он не превышает ограничения сервера.
< li>Проверена конфигурация кода для настроек SMTP, включая имя хоста, порт, метод шифрования и аутентификацию. - Включена отладка/вход в систему код для сбора подробной информации о связи SMTP.
- Проверено отправку электронных писем с вложениями с использованием разных почтовых клиентов или библиотек.
- Проверены журналы SMTP-сервера на наличие сообщений об ошибках или предупреждений.
- Рассмотрено использование альтернативный SMTP-сервер для устранения проблем совместимости.
Код: Выделить всё
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;
}
Код: Выделить всё
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