Как прикрепить два или несколько файлов и отправить почту на PHP [дубликат]

Приведенный ниже код отправляет только одно вложение, но мне нужно прикрепить и отправить два файла (один файл rar и pdf)

  $ email_to = "$ email"; //Электронное письмо, которое вы отправляете (пример) $ email_from = "online@example.co.in"; //Электронное письмо, которое вы отправляете (пример) $ email_subject = "subject line"; //Тема электронного письма $ email_txt = "текст сообщения"; //Сообщение о том, что письмо содержит $ fileatt = "files/example.rar"; //Путь к файлу (пример) $ fileatt_type = "application/x-rar-compressed"; //Тип файла $ fileatt_name = "example.rar"; //Имя файла, которое будет использоваться для файла в качестве вложения $ file = fopen ($ fileatt, 'rb'); $ data = fread ($ file, sizes ($ fileatt)); fclose ($ file); $ semi_rand =  md5 (time ()); $ mime_boundary = "== Multipart_Boundary_x {$ semi_rand} x"; $ headers = "От: $ email_from"; //От кого письмо (пример) $ headers. = " NMIME-Version: 1.0  n". "Content-Type: multipart/mixed;  n". "Border = " {$ mime_boundary}  ""  ; $ email_message. = "Это сообщение, состоящее из нескольких частей, в формате MIME.  n  n". "- {$ mime_boundary}  n". "Content-Type: text/html; charset = " iso-8859  -1  " n". "Content-Transfer-Encoding: 7bit  n  n".  $ email_txt; $ email_message. = " n  n"; $ data = chunk_split (base64_encode ($ data)); $ email_message. = "- {$ mime_boundary}  n". "Content-Type: {$ fileatt_type}  ;  n "." name =  "{$ fileatt_name} "  n "." Content-Transfer-Encoding: base64  n  n ". $ data.  " n  n". "- {$ mime_boundary} -  n"; mail ($ email_to, $ email_subject, $ email_message, $ headers);  

    



phpif ($ _ POST) {for ($ i = 0; $ i письмо отправлено на $ to! "; } else {echo "

не удалось отправить письмо!

"; }}?>

4


Следование принципам повторного использования , вы можете использовать https://github.com/Synchro/PHPMailer

 isSMTP (  ); //Настраиваем почтовую программу на использование SMTP $ mail-> Host = 'smtp1.example.com; smtp2.example.com'; //Указываем основной и резервный сервер $ mail-> SMTPAuth = true; //Включить аутентификацию SMTP $ mail-> Username = 'jswan'; //Имя пользователя SMTP $ mail-> Password = 'secret'; //Пароль SMTP $ mail-> SMTPSecure = 'tls'; //Включаем шифрование, ssl также принимает $ mail-> From = 'from@example.com'; $ mail-> FromName = 'Mailer'; $ mail-> addAddress ('josh@example.net ',' Джош  Адамса); //Добавляем получателя $ mail-> addAttachment ('/var/tmp/file.tar.gz'); //Добавляем вложения $ mail-> addAttachment ('/tmp/image.jpg', 'new.jpg'); //Необязательное имя $ mail-> Subject = 'Вот тема'; $ mail-> Body = 'Это тело HTML-сообщения  жирным шрифтом! '; $ mail-> AltBody = 'Это  - это текст в виде обычного текста для почтовых клиентов, отличных от HTML '; if (! $ mail-> send ()) {echo' Сообщение не может быть отправлено. ';  echo "Ошибка почтовой программы:".  $ mail-> ErrorInfo;  exit;} echo 'Сообщение отправлено';  


Проверьте следующее вложение нескольких файлов в основной функции почты php.

   php/** Почта с вложением */function mail_attachment ($ filename, $ path, $ mailto, $ from_mail, $ from_name, $ replyto, $ bcc, $  тема, $ сообщение) {$ uid = md5 (uniqid (time ()));  $ mime_boundary = "== Multipart_Boundary_x {$ uid} x";  $ header = "От:". $ from_name. "  r  n";  $ header. = "Скрытая копия:". $ bcc. " r  n";  $ header. = "Reply-To:". $ replyto. " r  n";  $ header. = "Версия MIME: 1.0  r  n";  $ header. = "Content-Type: multipart/mixed; граница = " ". $ mime_boundary."  " r  n  r  n";  $ header. = "Это сообщение, состоящее из нескольких частей, в формате MIME.  r  n";  $ header. = "-". $ mime_boundary. " r  n";  $ header. = "Content-type: text/html; charset = iso-8859-1  r  n";  $ header. = "Кодирование передачи содержимого: 7 бит  r  n  r  n";  $ header. = nl2br ($ message). " r  n  r  n";  $ header. = "-". $ mime_boundary. " r  n";  foreach ($ filename как $ k => $ v) {$ file = $ path. $ v;  $ file_size = размер файла ($ файл);  $ handle = fopen ($ file, "r");  $ content = fread ($ handle, $ file_size);  fclose ($ handle);  $ content = chunk_split (base64_encode ($ content));  $ header. = "Content-Type: application/octet-stream; name = " ". $ v."  " r  n"; //здесь используются разные типы содержимого $ header. = "Content-Transfer-Encoding: base64  r  n";  $ header. = "Content-Disposition: attachment; filename = " ". $ v."  " r  n  r  n";  $ header. = $ content. " r  n  r  n";  $ header. = "-". $ mime_boundary. "-". " r  n";  } if (mail ($ mailto, $ subject, "", $ header)) {//echo "mail send ... OK"; //или используйте здесь логические значения return true;  } else {//echo "mail send ... ERROR!";  вернуть ложь;  }}?>  


Это одно из лучших решений, которое я получил для вложения нескольких писем и успешно протестирован.

Этот код дает вам свободу, прикрепляя файл к электронному письму без загрузки в пространство вашего хостинг-сервера. Что крайне необходимо.

Существует множество решений, рассказывающих, как загружать файлы на ваш сервер, а затем отправлять их по электронной почте, но это решение дает « Прямое прикрепление нескольких файлов к электронной почте »

      Электронное письмо с вложением      phpif ($ _SERVER ['REQUEST_METHOD'] == "POST") {//мы начнем с присвоения адреса Кому и темы сообщения $ to = "me @ me. com "; $ subject =" Электронное письмо с вложением ";//получаем имя отправителя и адрес электронной почты//мы просто вставим им переменную, которая будет использоваться позже $ from = stripslashes ($ _ POST ['fromname'])  . "";//генерируем случайную строку, которая будет использоваться в качестве маркера границы $ mime_boundary = "== Multipart_Boundary_x" .md5 (mt_rand ()). "  x ";//теперь создадим заголовки сообщений $ headers =" From: $ from  r  n "." MIME-Version: 1.0  r  n "." Content-Type: multipart/mixed;  r   n "." Border =  "{$ mime_boundary} " ";//здесь мы запустим тело сообщения.//это текст, который будет отображаться//в электронном письме $ message ="  Это пример "; $ message. =" Name: ". $ _ POST [" fromname "]." Сообщение отправлено: ". $ _ POST [" modlist "];//затем мы создадим невидимую часть  тело сообщения//обратите внимание, что мы вставляем два тире перед границей MIME//, когда используем ее $ message = "Это составное сообщение в формате MIME.  n  n". "- {$ mime_boundary}   n "." Content-Type: text/plain;  charset =  "iso-8859-1 "  n "." Content-Transfer-Encoding: 7bit  n  n ". $ message."  n  n ";//теперь мы обработаем наши загруженные файлы для каждого  ($ _FILES as $ userfile) {//сохраняем информацию о файле в переменных для облегчения доступа $ tmp_name = $ userfile ['tmp_name']; $ type = $ userfile ['type']; $ name = $ userfile ['name'  ]; $ size = $ userfile ['size'];//если загрузка прошла успешно, файл будет существовать if (file_exists ($ tmp_name)) {//проверяем, что это загруженный файл, а не системный  if (is_uploaded_file ($ tmp_name)) {//открываем файл для двоичного чтения $ file = fopen ($ tmp_name, 'rb');//читаем содержимое файла в переменную $ data = fread ($ file, sizes (  $ tmp_name));//закрываем файл fclose ($ file);//теперь мы его кодируем и разбиваем на строки приемлемой длины $ data = chunk_split (base64_encode ($ data));}//теперь вставим  граница, чтобы указать, что мы начинаем вложение,//мы должны указать тип содержимого, имя файла и расположение как//вложение, а затем добавить содержимое файла.//ПРИМЕЧАНИЕ.  : мы не устанавливаем другую границу, чтобы указать, что//здесь достигнут конец файла.  нам нужна только одна граница между каждым файлом//мы добавим последнюю границу после завершения цикла.  $ message. = "- {$ mime_boundary}  n".  "Content-Type: {$ type};  n".  "name = " {$ name}  " n".  "Content-Disposition: attachment;  n".  "filename = " {$ fileatt_name}  " n".  "Content-Transfer-Encoding: base64  n  n".  $ data.  " п  п";  }}//вот наша закрывающая граница mime, которая указывает на последнее сообщение $ message. = "- {$ mime_boundary} -  n"; //теперь мы просто отправляем сообщение if (@mail ($ to, $ subject, $ message, $ headers)) echo "Сообщение отправлено";  else echo "Не удалось отправить";} else {?> 

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

Ваше имя:

Ваш адрес электронной почты:

Список модов:

Файл:

Файл:

Файл:

Файл:

Файл:

Файл:

Файл:

Файл:

php}?>
2

Попробуйте это. Поместите файлы в массив, затем с помощью цикла формы добавьте каждый из них в переменную $ email_message

  $ email_to = "$ email  "; //Электронное письмо, которое вы отправляете (пример) $ email_from = "online@example.co.in"; //Электронное письмо, которое вы отправляете (пример) $ email_subject = "subject line"; //Тема электронного письма $ email_message = "текст сообщения"; //Сообщение о том, что электронное письмо содержит $ files = array ("file_1.ext", "file_2.ext", "file_3.ext", ......); $ semi_rand = md5 (time ());  $ mime_boundary = "== Multipart_Boundary_x {$ semi_rand} x"; $ headers = "От: $ email_from"; //От кого письмо (пример) $ headers. = " NMIME-Version: 1.0  n". "Content-Type: multipart/mixed;  n". "Border = " {$ mime_boundary}  ""  ; $ email_message. = "Это сообщение, состоящее из нескольких частей, в формате MIME.  n  n". "- {$ mime_boundary}  n". "Content-Type: text/html; charset = " iso-8859  -1  " n". "Content-Transfer-Encoding: 7bit  n  n".  $ email_txt; $ email_message. = " п  п";  for ($ x = 0; $ x  

Надеюсь, все работает нормально 🙂

3


Это код, который я использую для отправки нескольких вложений, надеюсь, это вам тоже поможет . На самом деле вам нужно использовать цикл для прикрепления нескольких файлов.

  $ files = array ("file1.pdf", "file2.pdf");  $ body = "электронное письмо в формате html"; //поля электронной почты: кому, от кого, тема и т. д. $ to = "идентификатор электронной почты человека, которому вы отправляете";  $ from = "ваш e-mail id";  $ subject = "тема электронной почты";  $ message = html_entity_decode ($ body);  $ headers = "От: $ от"; //граница $ semi_rand = md5 (time ());  $ mime_boundary = "== Multipart_Boundary_x {$ semi_rand} x"; //заголовки для вложений $ headers. = " nMIME-Version: 1.0  n".  «Content-Type: multipart/mixed;  n».  "border = " {$ mime_boundary}  ""; //составная граница $ message = "Это составное сообщение в формате MIME.  n  n".  "- {$ mime_boundary}  n".  "Content-Type: text/html; charset = " iso-8859-1  " n".  "Content-Transfer-Encoding: 7bit  n  n".  $ сообщение.  " п  п";  $ message. = "- {$ mime_boundary}  n"; //подготовка вложений для ($ x = 0; $ x  письмо отправлено на $ to! ";  } else {echo "

не удалось отправить письмо!

"; }

  //выбрать несколько файлов $ target_dir = "upload/"; //сначала загрузите путь к вашему каталогу $ names = $ _FILES ['file'] ['name']; //Имя файла $ i = 0; foreach ($ names как $ name) {$ target_file = $ target_dir.  базовое имя ($ имя); //сначала загрузите свой каталог pathmove_uploaded_file ($ _ FILES ["файл"] ["tmp_name"] [$ i], $ target_file); //загружаем ваш каталог $ mail-> addAttachment ($ target_file); //после загрузки пути к файлу выборка и прикрепление $ i ++;}  

1


Простой рабочий и проверенный пример:

   php mail_attachment ("mail@mail.com", "Subject"  , «Вот тело», array («file1.pdf», «file2.pdf»));  функция mail_attachment ($ to, $ subject, $ message, $ files) {$ headers = "From: no-reply@mail.com";  $ semi_rand = md5 (время ());  $ mime_boundary = "== Multipart_Boundary_x {$ semi_rand} x";  $ headers. = " nMIME-Версия: 1.0  n".  «Content-Type: multipart/mixed;  n».  "border = " {$ mime_boundary}  "";  $ message = "Это составное сообщение в формате MIME.  n  n".  "- {$ mime_boundary}  n".  "Content-Type: text/html; charset = " iso-8859-1  " n".  "Content-Transfer-Encoding: 7bit  n  n".  $ сообщение.  " п  п";  $ message. = "- {$ mime_boundary}  n";  foreach ($ files as $ file) {$ filename = end (explode ("/", $ file));  $ data = file_get_contents ($ файл);  $ data = chunk_split (base64_encode ($ data));  $ message. = "Content-Type: {" application/octet-stream  "};  n".  "имя = " $ файл  " п".  "Content-Disposition: attachment;  n".  "filename = " $ file  " n".  "Content-Transfer-Encoding: base64  n  n".  $ data.  " п  п";  $ message. = "- {$ mime_boundary}  n";  } echo (@mail ($ to, $ subject, $ message, $ headers))?  "

Отправить в $ to!

": "

Не отправлять в $ to!

"; }//почтовое вложение?>

К вашему сведению , эта строка из исходного сообщения, а также некоторые ответы вызовут проблему в некоторых почтовых системах.

$ headers. = " nMIME-Version: 1.0 n".

Знак n в начале вызывал сбой вложения при отправке на адрес, размещенный в emailpros. com, безопасную систему электронной почты, совместимую с HIPAA. Простое удаление разрыва строки устранило проблему. Однако он отлично работал при отправке на учетную запись Gmail и другой хост (Hostmonster). Этот способ отлично работал на всех из них. $ Headers. = "MIME-Version: 1.0 n".


   php//загрузить раздел файла рекомендаций $ target_dir = "  wp-content/uploads/rec_file/"; $ target_file = $ target_dir.  basename ($ _ FILES ["RC_file"] ["name"]); $ uploadOk = 1; $ imageFileType = pathinfo ($ target_file, PATHINFO_EXTENSION);//Проверяем, является ли файл изображения действительным или поддельным изображением $ check = getimagesize (  $ _FILES ["RC_file"] ["tmp_name"]);  if ($ check! == false) {$ error_msg = "Файл представляет собой изображение -".  $ check ["пантомима"].  ".";  $ uploadOk = 1;  } else {$ error_msg = "Файл не является изображением.";  $ uploadOk = 0;  }//Проверяем, существует ли уже файл if (file_exists ($ target_file)) {$ error_msg = "Извините, файл уже существует.";  $ uploadOk = 0;}//Проверяем размер файлаif ($ _FILES ["RC_file"] ["size"]> 500000) {echo "Извините, ваш файл слишком велик.";  $ uploadOk = 0;}//Разрешить определенные форматы файлов if ($ imageFileType! = "jpg" && $ imageFileType! = "png" && $ imageFileType! = "jpeg" && $ imageFileType! = "gif") {$ error_msg = "  К сожалению, разрешены только файлы JPG, JPEG, PNG и GIF. ";  $ uploadOk = 0;}//Проверяем, установлено ли для $ uploadOk значение 0 из-за ошибки if ($ uploadOk == 0) {$ error_msg = "ваш файл не был загружен.";//если все в порядке, пытаемся загрузить файл  } else {if (move_uploaded_file ($ _ FILES ["RC_file"] ["tmp_name"], $ target_file)) {echo "Файл".  базовое имя ($ _FILES ["RC_file"] ["имя"]).  "загружено.";  } else {echo "К сожалению, при загрузке файла произошла ошибка.".  $ error_msg;  }}//загружаем раздел файла управляемой лицензии $ DL_target_dir = "wp-content/uploads/rec_file/"; $ DL_target_file = $ DL_target_dir.  basename ($ _ FILES ["DL_file"] ["name"]); $ uploadOk = 1; $ imageFileType = pathinfo ($ DL_target_file, PATHINFO_EXTENSION);//Проверяем, является ли файл изображения действительным или поддельным изображением $ check = getimagesize (  $ _FILES ["DL_file"] ["tmp_name"]);  if ($ check! == false) {$ error_msg = "Файл представляет собой изображение -".  $ check ["пантомима"].  ".";  $ uploadOk = 1;  } else {$ error_msg = "Файл не является изображением.";  $ uploadOk = 0;  }//Проверяем, существует ли уже файл if (file_exists ($ DL_target_file)) {$ error_msg = "Извините, файл уже существует.";  $ uploadOk = 0;}//Проверяем размер файлаif ($ _FILES ["DL_file"] ["size"]> 500000) {echo "Извините, ваш файл слишком велик. "; $ uploadOk = 0;}//Разрешить определенные форматы файловif ($ imageFileType! =" jpg "&& $ imageFileType! =" png "&& $ imageFileType! =" jpeg "&& $ imageFileType! =" gif ") {$ error_msg  = "Извините, разрешены только файлы JPG, JPEG, PNG и GIF."; $ UploadOk = 0;}//Проверяем, установлено ли для $ uploadOk значение 0 с помощью ошибки if ($ uploadOk == 0) {$ error_msg = "ваш  файл не был загружен. ";//если все в порядке, попробуйте загрузить файл} else {if (move_uploaded_file ($ _ FILES [" DL_file "] [" tmp_name "], $ DL_target_file)) {echo" The file ". basename  ($ _FILES ["DL_file"] ["name"]). "Был загружен.";} Else {echo "К сожалению, при загрузке файла произошла ошибка.  ". $ error_msg;}}//массив с именами файлов для отправки в виде вложения $ files = array ($ target_file, $ DL_target_file);//поля электронной почты: кому, от, тема и т. д. $ to =" tkdilankumara @ gmail  .com "; $ from =" help@soosti.com "; $ subject =" Регистрация участника "; $ headers =" From: $ from "; $ eol ="  r  n "; $ message. =" Регистрация участника  Информация. ". $ Eol; $ message. = $ Username. $ Eol; $ message. = $ Email. $ Eol; $ message. = $ Fname. $ Eol; $ message. = $ Lname. $ Eol; $ message.  = $ address. $ eol;//граница $ semi_rand = md5 (time ()); $ mime_boundary = "== Multipart_Boundary_x {$ semi_rand} x";//заголовки для вложения $ headers. = " nMIME-Version: 1.0   n "." Content-Type: multipart/mixed;  n "." Border =  "{$ mime_boundary} " ";//multipart boundary $ message =" Это составное сообщение в формате MIME.   n  n "." - {$ mime_boundary}  n "." Content-Type: text/plain;  charset =  "iso-8859-1 "  n "." Content-Transfer-Encoding: 7bit  n  n ". $ message."  n  n "; $ message. =" - {$ mime_boundary}   n ";//подготовка вложений для ($ x = 0; $ x  письмо отправлено на $ to!  ";} else {echo" 

не удалось отправить почту!

";}?>


Прикрепить несколько файлов к электронному письму из Google Docs

Я хочу отправить два файла по электронной почте как вложения к одному электронному письму в Gmail, не загружая их из Документов Google. При просмотре всех элементов в Документах пункт «Отправить как вложение» в раскрывающемся меню «Поделиться» неактивен.

Во-первых ... почему? Во-вторых, есть ли способ обойти это?


http://docs.google.com/support/bin/answer.py?hl=ru&answer=58225

«Имейте в виду, что невозможно отправить несколько документов по электронной почте в виде вложений».

Похоже, ваш единственный вариант - загрузить несколько документов (Дополнительные действия> Экспорт> Загрузить) и прикрепить полученный в результате zip-архив в электронное письмо ... или несколько раз пройти процесс «Отправить как вложение».


Gmail анонсировал новую функцию, которая позволяет вставлять файлы с Диска прямо в электронное письмо, не выходя из Gmail.


Я сделал следующее: как только вы откроете документ, нажмите в файл, а затем загрузите в формате PDF и сохраните на свой компьютер. Затем перейдите к своей электронной почте, загрузите файлы со своего компьютера и прикрепите столько документов, сколько вам нужно.


Лучше всего загрузить их в общую папку Dropbox, получить URL-адрес для файлов и создать ссылку в Gmail с этим URL-адресом. Таким образом, когда пользователь нажимает ссылку в своем электронном письме, он фактически загружает файлы с сервера Dropbox.

Оцените статью
clickpad.ru
Добавить комментарий