首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Mail_Mime向GMail发送附件,接收"noname“附件

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

Stack Overflow用户
提问于 2011-07-12 06:17:08
回答 2查看 3.4K关注 0票数 4

我有一个非常简单的网站表单,可以接受附件。它使用gmail的smtp发送到gmail地址。一切都很好,除了文件以"noname“的形式出现--没有文件名或扩展名。如果下载附件并使用正确的文件名对其进行重命名,则该文件将正常打开。

我尝试向addAttachment()添加更多参数,例如文件类型和文件名,但它们不会出现在电子邮件中。当我在gmail中点击"Show Original“时,这是我在附件部分看到的全部内容(它们根本不会改变,不管我使用什么参数):

代码语言:javascript
运行
复制
Content-Transfer-Encoding: base64
Content-Type: application/octet-stream
Content-Disposition: attachment

以下是我的代码的相关部分:

代码语言:javascript
运行
复制
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);

任何帮助都是非常感谢的!

EN

回答 2

Stack Overflow用户

发布于 2011-07-17 02:34:10

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

代码语言:javascript
运行
复制
$Filepath = $Uploads_folder.$Filename;
$content_type = "Application/pdf";
$mime->addAttachment($Filepath, $content_type);
票数 0
EN

Stack Overflow用户

发布于 2016-03-03 17:46:17

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

此服务器运行sendmail服务。

我测试了3个域。

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

我测试了几个代码,发现边界‘头非常重要。

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

代码语言:javascript
运行
复制
Content-Type: multipart/mixed; boundary=;

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

这封电子邮件在does.kr和naver.com上看起来没问题。

但在gmail.com中并非如此。我看到了'noname'文件,据我所知,这个问题自2007年以来一直没有解决。

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

代码语言:javascript
运行
复制
Content-Type: multipart/mixed; boundary=----=part56d7fa8d7a369;

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

这封电子邮件在does.kr和gmail.com上看起来没问题。

但在naver.com中并非如此。我在naver.com里除了标题什么也没看到。

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

因此,我不得不扩展我的代码,根据电子邮件地址来设置不同的“边界”。

它工作得很好。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6657363

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档