Php отправка вложений smtp

PHP: How to send email with attachment using smtp settings?

I am sending emails successfully using following code. But now I want to attach a text file (example: test.txt) with email. Any Idea?

require_once "Mail.php"; $from = "Usman "; $to = "Naveed "; $subject = "subject"; $body = ""; $host = "smtp.gmail.com"; $username = "username"; $password = "password"; $headers = array ('From' => $from, 'To' => $to, 'Subject' => $subject); $smtp = Mail::factory( 'smtp', array('host' => $host, 'auth' => true, 'username' => $username, 'password' => $password ) ); $mail = $smtp->send( $to, $headers, $body ); if ( PEAR::isError($mail) ) < echo( "

" . $mail->getMessage() . "

" ); > else < echo( "

Message successfully sent!

" ); >

I’m serious — change your password. Deleted questions are still visible to users with high enough reputation.

5 Answers 5

Found this code as one of the first hits of the google://pear mail attachment search.

include('Mail.php'); include('Mail/mime.php'); $text = 'Text version of email'; $html = 'HTML version of email'; $file = './files/example.zip'; $hdrs = array( 'From' => 'someone@domain.pl', 'To' => 'someone@domain.pl', 'Subject' => 'Test mime message' ); $mime = new Mail_mime(); $mime->setTXTBody($text); $mime->setHTMLBody($html); $mime->addAttachment($file,'application/octet-stream'); $body = $mime->get(); $hdrs = $mime->headers($hdrs); $mail =& Mail::factory('mail', $params); $mail->send('mail@domain.pl', $hdrs, $body); 

@TomMcGee I updated the code to remove the «rn», it’s the default anyway: pear.php.net/manual/en/package.mail.mail-mime.mail-mime.php

If you additionally make use of the PHP PEAR Mail_Mime module it provides the appropriate handling and encoding to incorporate attachments as part of your email.

Читайте также:  display

here is the code you’re looking for:

"; $to = "Sam Hill "; $subject = 'Test mime message with an attachment'; $headers = array ('From' => $from,'To' => $to, 'Subject' => $subject); $text = 'Text version of email';// text and html versions of email. $html = 'HTML version of email. This should be bold '; $file = './sample.txt'; // attachment $crlf = "\n"; $mime = new Mail_mime($crlf); $mime->setTXTBody($text); $mime->setHTMLBody($html); $mime->addAttachment($file, 'text/plain'); //do not ever try to call these lines in reverse order $body = $mime->get(); $headers = $mime->headers($headers); $host = "sasl.smtp.pobox.com"; $username = "robertdavis@pobox.com"; $password = "Kdu48Adi3"; $smtp = Mail::factory('smtp', array ('host' => $host, 'auth' => true, 'username' => $username,'password' => $password)); $mail = $smtp->send($to, $headers, $body); if (PEAR::isError($mail)) < echo("

" . $mail->getMessage() . "

"); > else < echo("

Message successfully sent!

"); > ?>

Источник

Отправка почты средствами PHP

Работая над проектом, мне пришлось создать специфичную «анкету соискателя» в котором надо была отправлять всю анкету на указные за ране e-mail адрес, и я сразу же вспомнил про PHP функцию mail().

bool mail ( string to, string subject, string message [, string additional_headers [, string additional_parameters]]) 
  • E-mail получателя
  • Заголовок письма
  • Текст письма
  • Дополнительные заголовки письма
  • Дополнительные параметры командной строки
  • true, если письмо было принято к доставке
  • false, в противном случае.
Простейший пример
Перейдем к более сложному примеру
Текст письма


1-ая строчка
2-ая строчка
'; $headers = "Content-type: text/html; charset=windows-1251 \r\n"; $headers . ; $headers .= "Reply-To: reply-to@example.com\r\n"; mail($to, $subject, $message, $headers); ?>

В начале мы определяем кому адресовано письмо, за это отвечает переменная &to, если же получателей несколько человек, то записываем через запятую адреса эл. почты.

Переменные $subject и $message, не буду описывать, это и так понятно.

  • В первой строчке ми определяем ты отправляемого письма-HTML и кодировку windows-1251.
  • В 2-ом мы указываем от кого пришло письмо.
  • В 3-ем указываем e-mail адрес, для ответа на письмо.
А теперь самое интересное отправка письма c вложением (attachment)
$subject = "тема письма"; $message ="Текст сообщения"; // текст сообщения, здесь вы можете вставлять таблицы, рисунки, заголовки, оформление цветом и т.п. $filename = "file.doc"; // название файла $filepath = "files/file.doc"; // месторасположение файла //исьмо с вложением состоит из нескольких частей, которые разделяются разделителем $boundary = "--".md5(uniqid(time())); // генерируем разделитель $mailheaders = "MIME-Version: 1.0;\r\n"; $mailheaders .="Content-Type: multipart/mixed; boundary=\"$boundary\"\r\n"; // разделитель указывается в заголовке в параметре boundary $mailheaders . ; $mailheaders .= "Reply-To: $user_email\r\n"; $multipart = "--$boundary\r\n"; $multipart .= "Content-Type: text/html; charset=windows-1251\r\n"; $multipart .= "Content-Transfer-Encoding: base64\r\n"; $multipart .= \r\n; $multipart .= chunk_split(base64_encode(iconv("utf8", "windows-1251", $message))); // первая часть само сообщение // Закачиваем файл $fp = fopen($filepath,"r"); if (!$fp) < print "Не удается открыть файл22"; exit(); >$file = fread($fp, filesize($filepath)); fclose($fp); // чтение файла $message_part = "\r\n--$boundary\r\n"; $message_part .= "Content-Type: application/octet-stream; name=\"$filename\"\r\n"; $message_part .= "Content-Transfer-Encoding: base64\r\n"; $message_part .= "Content-Disposition: attachment; filename=\"$filename\"\r\n"; $message_part .= \r\n; $message_part .= chunk_split(base64_encode($file)); $message_part .= "\r\n--$boundary--\r\n"; // второй частью прикрепляем файл, можно прикрепить два и более файла $multipart .= $message_part; mail($to,$subject,$multipart,$mailheaders); // отправляем письмо //удаляем файлы через 60 сек. if (time_nanosleep(5, 0)) < unlink($filepath); >// удаление файла 

Источник

Отправка письма с вложением

Отправка письма с вложением

Данный код отправляет письмо в кодировке UTF-8 функцией mb_send_mail() , поэтому предварительно нужно настроить mbstring:

mb_internal_encoding('UTF-8'); mb_regex_encoding('UTF-8'); mb_http_output('UTF-8'); mb_language('uni'); date_default_timezone_set('Europe/Moscow'); header('Content-type: text/html; charset=utf-8');
// Кому. $to = '=?UTF-8?B?' . base64_encode('Вася Пупкин') . '?= '; // От кого. $from = '=?UTF-8?B?' . base64_encode('Иван Петров') . '?= '; $subject = 'Тема письма'; $body = 'Текст письма'; // Массив с файлами. $files = array( __DIR__ . '/logo.png', __DIR__ . '/image.png', ); $boundary = md5(uniqid(time())); // Формирование заголовка письма. $headers = array( 'Content-Type: multipart/mixed; boundary="' . $boundary . '"', 'Content-Transfer-Encoding: 7bit', 'MIME-Version: 1.0', 'From: ' . $from, 'Date: ' . date('r') ); // Формирование текста письма. $message = array( '--' . $boundary, 'Content-Type: text/html; charset=UTF-8', 'Content-Transfer-Encoding: base64', '', chunk_split(base64_encode($body)) ); // Формирование файлов. foreach ($files as $row) < if (is_file($row)) < $name = basename($row); $fp = fopen($row, 'rb'); $file = fread($fp, filesize($row)); fclose($fp); $message[] = ''; $message[] = '--' . $boundary; $message[] = 'Content-Type: application/octet-stream; name="' . $name . '"'; $message[] = 'Content-Transfer-Encoding: base64'; $message[] = 'Content-Disposition: attachment; filename="' . $name . '"'; $message[] = ''; $message[] = chunk_split(base64_encode($file)); >> $message[] = ''; $message[] = "--" . $boundary . '--'; $headers = implode("\r\n", $headers); $message = implode("\r\n", $message); // Отправка. mb_send_mail($to, $subject, $message, $headers);

Максимальный размер вложенных файлов

Письма не приходят на Mail.ru

Причина этого в том что Mail.ru принял политику безопасности DMARC – https://corp.mail.ru/ru/press/releases/9593/

Это происходит когда в адресе «от кого» указан почтовый ящик @mail.ru (также inbox.ru, list.ru, bk.ru).

Если письмо отправляется от Яндекса, Gmail и т.д. такой проблемы нет. Если письмо отправляется от своего домена то в нем нужно настроить SPF и DKIM записи.

Письма не приходят на Яндекс

Проблема возникает если в заголовках письма есть следующее записи:

Reply-To: mail@site.com Return-Path: mail@site.com

Источник

Отправка письма из PHP используя SMTP (c вложением)

Отправка письма из PHP используя SMTP (c вложением)

В PHP достаточно популярно использовать скрипты которые автоматизируют процесс отправки писем. В данной статье мы рассмотрим простой скрипт который выполняем отправку писем на почту получателей по средствам SMTP( Simple Mail Transfer Protocol ). Было бы слишком просто ограничится только этим функционалом, скрипт поддерживает и вложения то есть, вы сможете прикрепить pdf, txt или doc файл в своем письме.
Настройка скрипта довольно проста, от вас требуется только данные отправителя логин, пароль от электронной почты с которого будут отправляться письма.

Скрипт работает с классом km_smtp_class.php, класс хорош тем, что поддерживает разные протоколы SSL и TLS которые предоставляют защищенную передачу данных.

$mail = new KM_Mailer ( $SenderConfig [ ‘SMTP_server’ ] , $SenderConfig [ ‘SMTP_port’ ] , $SenderConfig [ ‘SMTP_email’ ] , $SenderConfig [ ‘SMTP_pass’ ] , $SenderConfig [ ‘SMTP_type’ ] ) ;

Настройка скрипта лежим в основном на массиве $SenderConfig , тут мы должны указать SMTP:сервер, порт, логин и пароль от электронной почты. Опишем каждый ключ массива:
SMTP_server — адрес SMTP сервера (индивидуальный адрес для разных почт)
Почта Mail.ru : smtp.mail.ru порт: 25, 587 и 465 (с шифрованием SSL)
Почта Yandex : smtp.yandex.ru порт: 25, 587 465 (SSL порт)
Почта Rambler : mail.rambler.ru порт: 25, 587 465 (SSL порт)
Почта Yahoo : smtp.mail.yahoo.com SSL-порт: 465
(Если понадобится адрес smtp серверов которые нет в списке — пишите в комментариях)

SMTP_port — Мы его сверху уже описали для каждого smtp сервера.

SMTP_email — точнее было бы user но для ясности написал email, указываем адрес электронной почты.

SMTP_pass — Пароль от электронной почты которая была указана как значение в ключе SMTP_email

SMTP_type — По умолчанию NULL. Протокол по которому будут отправлены письма. Протоколы: SSL и TLS

Вложения в письмо можно добавить просо указывая полный адрес к файлу в переменную $Attachment (/var/patch/to/file/File.pdf)

>> Скачать скрипт
Если будут вопросы пишите их в комментариях ниже.

Источник

Оцените статью