Отправка писем из PHP.

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:

PHP
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, например:

PHP
$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.';
}

 

Дата публикации: 

ТОП 10 случайных публикаций



Сайт разработан студией © WEB-VidST   


Яндекс.Метрика