Я изо всех сил пытался отправить электронное письмо с приложением с помощью PHP. Он работал, но тело сообщения было скремблировано. Теперь у меня есть тело сообщения, но вложение развращает. Я использовал кодировку base64 для тела сообщения, но теперь использую 7 бит. Может ли кто-нибудь сказать мне, что я делаю неправильно?
PS Пожалуйста, не говорите мне, что я должен использовать готовый класс для этого. Я попробовал несколько, и все они не работали. Если я не преодолю эти проблемы, я никогда не узнаю, как это сделать правильно. благодаря
//define the receiver of the email $to = 'a@something.co.uk'; //define the subject of the email $subject = 'Your Disneyland Paris entry'; //create a boundary string. It must be unique //so we use the MD5 algorithm to generate a random hash $random_hash = md5(date('r', time())); //define the headers we want passed. Note that they are separated with \n $mime_boundary = "<<<--==+X[".md5(time())."]"; $path = $_SERVER['DOCUMENT_ROOT'].'/two/php/'; $fileContent = chunk_split(base64_encode(file_get_contents($path.'CTF_brochure.pdf'))); $headers .= "From: info@blah.org.uk <info@blah.org.uk>"."\n"; $headers .= "MIME-Version: 1.0\n" . "Content-Type: multipart/mixed;\n" . " boundary=\"{$mime_boundary}\""; $message = "This is a multi-part message in MIME format.\n"; $message .= "\n"; $message .= "--".$mime_boundary."\n"; $message .= "Content-Type: text/plain; charset=\"iso-8859-1\"\n"; $message .= "Content-Transfer-Encoding: 7bit\n"; $message .= "\n"; $message .= "messagebody \n"; $message .= "--".$mime_boundary."" . "\n"; $message .= "Content-Type: application/octet-stream;\n"; $message .= " name=\"CTF-brochure.pdf\"" . "\n"; $message .= "Content-Transfer-Encoding: 7bit \n"; $message .= "Content-Disposition: attachment;\n"; $message .= " filename=\"CTF_brochure.pdf\"\n"; $message .= "\n"; $message .= $fileContent; $message .= "\n"; $message .= "--".$mime_boundary."--\n"; //send the email $mail_sent = mail($to, $subject, $message, $headers); //if the message is sent successfully print "Mail sent". Otherwise print "Mail failed" echo $mail_sent ? "Mail sent" : "Mail failed";
Я бы предложил просмотреть phpmailer, если вы хотите создать сложную электронную почту.
Я мог ошибаться, но я считаю, что вам придется каким-то образом закодировать PDF-файл, 7 бит не будет работать, поскольку файл PDF будет содержать контент вне диапазона. Почему бы не использовать base64 для PDF?
Я знаю, что вы говорили о заранее подготовленных классах, но есть причина, по которой люди это делают – зачем изобретать колесо? Я использую SwiftMailer для проектов – это не может быть проще. См. Пример SwiftMailer для 13 строк (включая несколько пустых) о том, как создать сообщение, добавить вложение и отправить.
Что касается разрешения вашего фактического запроса, подтвердите ответ Джоша – я бы второй изменил кодировку и посмотрел, как вы справляетесь. Вы пытались получить пример сообщения электронной почты, в котором есть вложение, которое работает, и изучение необработанных данных?