使用 Mail_Mime 将附件发送到 GMail,接收"noname"附件



我有一个非常简单的网站表单,可以接受附件。它使用gmail的smtp发送到一个gmail地址。一切都很好,除了文件到达时是"noname"——没有文件名或扩展名。如果下载附件并使用正确的文件名重命名,则文件可以正常打开。

我已经尝试添加更多的参数addatattachment(),如文件类型和文件名,但他们没有出现在电子邮件中。当我在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);

最近,我必须实现一个服务,通过我的apache服务器从android应用程序发送电子邮件。

此服务器运行sendmail服务。

我测试了3个域。

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

我已经测试了几个代码,并意识到'boundary'头非常重要。


我的第一个边界是什么都没有。

Content-Type: multipart/mixed; boundary=;

我发的邮件有两个附加文件和那个头。

电子邮件在does.kr和naver.com上看起来很好。

但在gmail.com中没有。我看到'noname'文件,据我所知,这是一个自2007年以来尚未解决的问题。


我的第二个边界是"----=part56d7fa8d7a369",由unique() of php.

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

我发送的邮件除了头文件以外都是相同的文件。

在does.kr和gmail.com上看起来很好。

但是在naver.com中没有。我在naver.com上除了标题什么也没看到。


唯一的区别是"边界",结果是完全不同的。

所以,我不得不修改我的代码,根据电子邮件地址设置不同的"边界"。

效果很好

相关内容

  • 没有找到相关文章

最新更新