Использование Mail_Mime для отправки вложения в GMail, получение вложения «noname»

У меня есть довольно простая форма сайта, которая может принимать вложения. Он отправляет на адрес gmail, используя smtp gmail. Все работает отлично, за исключением того, что файл поступает как «noname» – нет имени файла или расширения. Если вы загрузите вложение и переименуете его с правильным именем файла, файл открывается просто отлично.

Я попытался добавить дополнительные аргументы в addAttachment (), такие как тип файла и имя файла, но они не отображаются в письме. Когда я нажимаю «Показать оригинал» в gmail, это все, что я вижу в разделе вложений (они вообще не меняются, независимо от того, какие аргументы я использую):

Content-Transfer-Encoding: base64 Content-Type: application/octet-stream Content-Disposition: attachment 

Вот соответствующая часть моего кода:

 require_once 'Mail.php'; require_once 'mime.php'; $ToEmail = '***@***.com'; $EmailSubject = '*** contact form'; $Filename = basename($_FILES['uploaded_file']['name']); $host = "ssl://smtp.gmail.com"; $port = "465"; $username = "***@***.com"; $password = "***"; $MESSAGE_BODY = "Blah blah blah"; $Uploads_folder = "../uploads/"; $Filepath = $Uploads_folder.$Filename; $tmp_path = $_FILES["uploaded_file"]["tmp_name"]; if(is_uploaded_file($tmp_path)) { if(!copy($tmp_path, $Filepath)) { echo 'Sorry, there was an error in uploading the file. Please go back and try again.'; exit(); } } $headers = array ('From' => $username, 'To' => $ToEmail, 'Subject' => $EmailSubject); $mime = new Mail_mime(); $mime->setHTMLBody($MESSAGE_BODY); $mime->addAttachment($Filepath); $body = $mime->get(); $headers = $mime->headers($headers); $smtp = Mail::factory('smtp', array ('host' => $host, 'port' => $port, 'auth' => true, 'username' => $username, 'password' => $password)); $mail = $smtp->send($ToEmail, $headers, $body); 

Любая помощь очень ценится!

Solutions Collecting From Web of "Использование Mail_Mime для отправки вложения в GMail, получение вложения «noname»"

Вы пытались добавить переменную Content-Type в список аргументов addAttachment() ? Например, если вы знали, что пользователь загружает документы .pdf, вы должны сделать следующее:

 $Filepath = $Uploads_folder.$Filename; $content_type = "Application/pdf"; $mime->addAttachment($Filepath, $content_type); 

Недавно мне пришлось реализовать службу, которая отправляет электронное письмо из приложения Android через мой сервер apache.

Этот сервер запускает службу sendmail.

Я протестировал 3 домена.

  1. @ naver.com
  2. @ gmail.com
  3. @ does.kr

Я проверил несколько кодов и понял, что заголовок «границы» имеет значение.


Моя первая граница была ничем.

 Content-Type: multipart/mixed; boundary=; 

Я отправил электронные письма с двумя прикрепленными файлами и этим заголовком.

Электронная почта отлично смотрелась в файлах do.kr и naver.com.

Но это не было в gmail.com. Я видел файлы «noname» , проблемы, которые еще не были решены с 2007 года, насколько я знаю.


Моя вторая граница была «—- = part56d7fa8d7a369», сделанная из уникальной () php.

 Content-Type: multipart/mixed; boundary=----=part56d7fa8d7a369; 

Я отправил электронные письма с теми же файлами, кроме заголовка.

Письмо было отлично видно в файлах do.kr и gmail.com.

Но это не было в naver.com. Я не видел ничего, кроме названия на naver.com.


Единственное различие заключалось в том, что «граница» и результат был совсем другим.

Таким образом, я должен был разветвить свой код, чтобы сделать разные «границы» в зависимости от адреса электронной почты.

И это сработало отлично.