Отправка писем из 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.';
}Дата публикации:

