使用Mail_Mime向GMail发送附件,接收“noname”附件

时间:2011-07-11 22:17:08

标签: php smtp gmail pear mime-mail

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

我已尝试为addAttachment()添加更多参数,例如文件类型和文件名,但它们不会显示在电子邮件中。当我点击gmail中的“Show Original”时,这就是我在附件部分看到的内容(无论我使用什么参数,它们都不会改变):

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);

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:0)

您是否尝试在Content-Type参数列表中添加addAttachment()变量?例如,如果您知道用户正在上载.pdf文档,您将执行以下操作:

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

答案 1 :(得分:0)

最近,我不得不实现一项服务,通过我的apache服务器从Android应用程序发送电子邮件。

此服务器运行sendmail服务。

我测试了3个域名。

  1. @ naver.com
  2. @ gmail.com
  3. @ does.kr
  4. 我测试了几个代码并意识到'border'标题非常重要。

    我的第一个界限是什么。

    Content-Type: multipart/mixed; boundary=;
    

    我发送了带有2个附加文件和标题的电子邮件。

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

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

    我的第二个边界是“---- = part56d7fa8d7a369”,由php的unique()组成。

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

    我发送的电子邮件除了标题以外都有相同的文件。

    电子邮件在did.kr和gmail.com中看起来很好。

    但是在naver.com上没有。我在naver.com上只看到了标题。

    唯一的区别是'边界'和结果是完全不同的。

    因此,我必须根据电子邮件地址分支我的代码以制作不同的“边界”。

    它运作得很好。