У меня есть довольно простая форма сайта, которая может принимать вложения. Он отправляет на адрес 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);
Любая помощь очень ценится!
Вы пытались добавить переменную Content-Type
в список аргументов addAttachment()
? Например, если вы знали, что пользователь загружает документы .pdf, вы должны сделать следующее:
$Filepath = $Uploads_folder.$Filename; $content_type = "Application/pdf"; $mime->addAttachment($Filepath, $content_type);
Недавно мне пришлось реализовать службу, которая отправляет электронное письмо из приложения Android через мой сервер apache.
Этот сервер запускает службу sendmail.
Я протестировал 3 домена.
Я проверил несколько кодов и понял, что заголовок «границы» имеет значение.
Моя первая граница была ничем.
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.
Единственное различие заключалось в том, что «граница» и результат был совсем другим.
Таким образом, я должен был разветвить свой код, чтобы сделать разные «границы» в зависимости от адреса электронной почты.
И это сработало отлично.