【问题标题】:CakeEmail Mandril email attachment not getting attachedCakeEmail Mandril 电子邮件附件未附加
【发布时间】:2015-11-07 08:29:11
【问题描述】:

我知道在 stackoverflow 上有很多关于这个问题的类似问题,我已经尝试了所有这些问题,但似乎都没有。

我正在尝试通过 cron 函数发送带有 csv 附件的电子邮件。我的电子邮件正在发送,但没有附件。这是我的代码

$email = new CakeEmail('mandrillSmtp');
$encodedCsv = base64_encode(implode(",",$headers)); 
        //please note that i have debugged encodedCsv. No  errors here

        $email->subject('Report Test');
        $email->from('xxxxx@abc.com');
        $email->to('zzzzz@abc.com');
        $email->emailFormat('html');
        $email->attachments=array(
                array(
                    'content' => $encodedCsv,
                    'type' => "text/csv",
                    'name' => 'report.csv'
                )
            );
        $email->send();

【问题讨论】:

  • 我猜你在这段代码中遗漏了一些东西。邮件怎么知道,你把base64encoded数据放在那里?如果我是对的,您需要指定编码。
  • 我已经阅读了山魈文档mandrillapp.com/api/docs/messages.JSON.html#method=content 我认为这就是 'type' => 'text/csv' 的用途。所以这可能不是它
  • @ndm '传统' cakeemail 与它看起来的山魈方式略有不同。在 cakeemail 附件中是一个函数,而在 mandrill api 中它是一个属性。无论如何,我查看了您发布的链接并尝试了以下操作:$email->attachments($uri)。其中 uri 是来自 csv 文件句柄的 uri。但我在尝试附加 csv 时不断收到:'找不到文件“”'。我使用 fopen('php://temp//fname.csv',''rw') 创建了我的文件。我知道这与我原来的问题完全不同,但我还没有找到解决方案:(
  • Mandrill 是一个电子邮件基础架构,具有 SMTP 集成、REST API 和适用于各种编程语言的 API 客户端。这些都不会影响 CakePHP 核心代码的工作方式!没有CakeEmail::$attachments 属性,甚至Mandrill PHP API 客户端在任何地方都没有这样的属性,并且无论您使用CakeEmail 使用什么SMTP 服务器,它都不会导致这样的属性神奇地出现,不是这样这个作品。 Mandrill REST API 支持 /messages/send.json 请求的 attachments 参数,但您没有使用 REST API。

标签: php email cakephp attachment mandrill


【解决方案1】:

大家好,感谢大家的帮助。我终于让我的代码工作了。感谢@ndm 提醒您,mandrill api 与 CakeEmail 完全不同(对我来说是短暂的愚蠢时刻)。 我通过使用 tmpfile() 而不是 fopen('php://temp') 解决了无法附加写入 php://temp 输出流的文件的问题。出于某种原因,即使我有他们的 uri,我也无法访问写入临时流的文件 无论如何继承我的代码。希望它可以帮助某人

$email = new CakeEmail('mandrillSmtp');
if($handle =tmpfile()){
                    fputcsv($handle, $headers); 
                    fputcsv($data)    ;

                }


        $fileMeta = stream_get_meta_data($handle);
        $uri = $fileMeta['uri'];


        $email->subject('Report Test');
        $email->from('xxx@abc.com');
        $email->to('zzz@abc.com');
        $email->emailFormat('html');
        $email->attachments(array('test.csv'=>array('mimetype'=>'text/csv','file' => $uri)));

        $email->send();

        fclose($handle);

【讨论】:

    【解决方案2】:

    如果您尝试附加 CSV 文件,那么您需要 CSV 文件的路径,我建议您按如下方式制作附件数组:

     $email->attachments = array(
    array('file' => 'pathToCSVFIle/myCSvFile.csv')
            );
    

    【讨论】:

      猜你喜欢
      • 2019-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多