4

我有一个非常简单的网站表单,可以带附件。它使用 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);

任何帮助是极大的赞赏!

4

2 回答 2

0

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

$Filepath = $Uploads_folder.$Filename;
$content_type = "Application/pdf";
$mime->addAttachment($Filepath, $content_type);
于 2011-07-16T18:34:10.443 回答
0

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

此服务器运行 sendmail 服务。

我测试了 3 个域。

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

我测试了几个代码并意识到“边界”标题非常重要。


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

Content-Type: multipart/mixed; boundary=;

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

在 dos.kr 和 naver.com 中的电子邮件看起来不错。

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


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

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

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

电子邮件在 dos.kr 和 gmail.com 中看起来不错。

但它没有在naver.com 中。我在 naver.com 中只看到了标题。


唯一的区别是那个“边界”,结果完全不同。

所以,我不得不根据电子邮件地址对我的代码进行分叉以形成不同的“边界”。

而且效果很好。

于 2016-03-03T09:46:16.797 回答