Отправка писем из PHP.
Как правило отправка писем с помощью стандартной PHP функции mail() заканчивается на стороне клиента попаданием в спам. Основная причина — это неправильное формирование заголовков и кодировки сообщения. Здесь я предложу вашему вниманию класс для отправки писем с вложением от AI ChatGPT. Код довольно хорошо справляется со своей задачей и все тестовые письма дошли до адресатов, не попадая в спам. Вот такой запрос я сформировал к AI:
Нужен PHP класс для отправки почты с вложением на несколько Email адресов через SMTP и SSl в кодировке UTF-8. Данные отправляющего email: 'smtp_username', 'smtp_password', 'smtp_host', 'smtp_port', берутся из файла конфигурации mail.ini. Класс полный не включающий сторонние библиотеки.
Вот пример PHP класса для отправки почты с вложением на несколько Email адресов через SMTP и SSl в кодировке UTF-8, используя данные из файла конфигурации mail.ini:
class Mailer { private $smtp_username; private $smtp_password; private $smtp_host; private $smtp_port; public function __construct() { $config = parse_ini_file('mail.ini'); $this->smtp_username = $config['smtp_username']; $this->smtp_password = $config['smtp_password']; $this->smtp_host = $config['smtp_host']; $this->smtp_port = $config['smtp_port']; } public function sendMail($to, $subject, $message, $attachment) { $boundary = md5(uniqid(time())); $headers = "From: {$this->smtp_username}\r\n"; $headers .= "Reply-To: {$this->smtp_username}\r\n"; $headers .= "MIME-Version: 1.0\r\n"; $headers .= "Content-Type: multipart/mixed; boundary=\"{$boundary}\"\r\n"; $message_body = "--{$boundary}\r\n"; $message_body .= "Content-Type: text/plain; charset=\"UTF-8\"\r\n"; $message_body .= "Content-Transfer-Encoding: 8bit\r\n"; $message_body .= "\r\n{$message}\r\n"; if (!empty($attachment)) { $file_name = basename($attachment); $file_contents = file_get_contents($attachment); $message_body .= "--{$boundary}\r\n"; $message_body .= "Content-Type: application/octet-stream; name=\"{$file_name}\"\r\n"; $message_body .= "Content-Transfer-Encoding: base64\r\n"; $message_body .= "Content-Disposition: attachment; filename=\"{$file_name}\"\r\n"; $message_body .= "\r\n" . chunk_split(base64_encode($file_contents)) . "\r\n"; } $sent = true; foreach ($to as $recipient) { $sent &= mail($recipient, $subject, $message_body, $headers, "-f{$this->smtp_username}"); } return $sent; } }
Чтобы использовать этот класс, вам нужно создать экземпляр Mailer и вызвать его метод sendMail, например:
$mailer = new Mailer(); $to = array('recipient1@example.com', 'recipient2@example.com'); $subject = 'Test email with attachment'; $message = 'Hello, this is a test email with an attachment.'; $attachment = '/path/to/attachment.pdf'; $sent = $mailer->sendMail($to, $subject, $message, $attachment); if ($sent) { echo 'Email sent successfully.'; } else { echo 'Failed to send email.'; }
Дата публикации: