使用SendGrid PHP发送文件附件(sendgrid-php库)

时间:2016-04-14 00:54:49

标签: php email email-attachments sendgrid

当我尝试使用SendGrid PHP库(https://github.com/sendgrid/sendgrid-php)发送附件时,该功能失败(白屏)。删除" setAttachment" line让它再次运作。

这是我的代码:

var randomIndex = Math.floor(Math.random() * numQuotes);
var quotation = quotes[randomIndex];
$(document.body).css({'background-image':'url("'+quotation.boxart+'")'});

据我所知,我正在关注文档,但我想知道我是否还没有正确格式化文件的路径。 " Test.txt的"与包含上述代码的文件位于同一目录中。

有人可以提出任何建议吗?

2 个答案:

答案 0 :(得分:8)

试试这个

 ->setAttachment(realpath(dirname(__FILE__)).DIRECTORY_SEPARATOR.'test.txt');

答案 1 :(得分:0)

这实际上并不属于这里,但是截至2019年4月17日,SendGrid打破了postfix机制,并在没有“适当”文档的情况下实施了v3 PHP客户端。而且我的意思是:没有任何文件被正确地记录下来(因为当我在SendGrid中键入内容时,这篇文章就出现在Google的顶部了-

所以,如果您看到此内容..不要惊慌,这篇文章对您有帮助

invalid authentication method - declined because you are using basic authentication with 2FA enabled. to fix, update to using an API key or disable 2FA and switch to using IP Access Management for security.

文档出现一些问题

在我看来,v3上的SendGrids文档是

  • 说明性而非信息性(功能性声明而非技术信息)
  • 严重错误(圆形链接的狂野追逐)
  • 已过时(没有什么可提醒您)
  • 缺少必要的组件(因此不会开箱即用,没有任何提示)....

例如:(只是一种味道)在这里我们看到“ 他们”(SendGrid)只是取出了 \ SendGrid \ Email()并替换为 \ SendGrid \ Mail \ Mail(),但未更新其文档-因此其发布的示例将无法使用。 -这是一个很小的变化-但是书面说明,调用者并不相同,因此他们从未更新过示例。.由于省略了其他所有内容,这使一件容易的事情变得非常困难。

即此示例作品v3

    $sendgrid = new SendGrid("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
    $email = new \SendGrid\Mail\Mail();
    $email->setFrom("test@example.com", "Example User");
    $email->setSubject("Sending with SendGrid is Fun");
    $email->addTo("bigman@getme.com", "Example User");
    $email->addContent(
        "text/plain", "and easy to do anywhere, even with PHP"
    );
    $email->addContent(
        "text/html", "<strong>and easy to do anywhere, even with PHP</strong>"
    );

    //optional (seems to be bullet proof, pdf,  png, etc) to attach a file<START>
    $att1 = new \SendGrid\Mail\Attachment();
    $att1->setContent(file_get_contents("/path/to/some/test_attach.txt"));
    $att1->setType("application/octet-stream");
    $att1->setFilename(basename("/path/to/some/test_attach.txt"));
    $att1->setDisposition("attachment");
    $email->addAttachment($att1);
    //optional to attach a file</END>       

    try {
        $response = $sendgrid->send($email);
        print $response->statusCode() . "\n";
        print_r($response->headers());
        print $response->body() . "\n";
    } 
    catch (Exception $e) {
        echo 'Caught exception: ',  $e->getMessage(), "\n";
    }`

要升级到v3,请在PHP 5.6上无需撰写器即可发送GRID CLI CLIENT

如果您像我一样讨厌作曲家(甚至不让我入门),那么,您好吗? 可以 让SendGrid正常工作-如此您知道..几乎所有“ 他们”(SendGrid)指导您上网的内容都将竭尽全力帮助您

2019年4月17日之后,SendGrid表示您需要使用v3 您将需要PHP 5.6。(对错,PHP 5.4是撰写本文时redhat / centos的上限)和 YOU

(尽管他们从未明确说过这句话,也没有标注他们的postfix示例v2 max,即从2019年4月17日起禁用)

截至2019年4月17日

-> you have to use v3 
-> you have to use the PHP client... (no postfix)
-> you have to upgrade to 5.6 
-> you **DO NOT** have to use composer (but if you don't you need to pay attention, see below)

也->(重要)您被客户端或第3版的卷发卡住了(他们不只是这)没有后缀。算了吧。还可以:Curl机制(虽然它与5.4兼容)带有a)没有使用附件的文档,并且b)使用非法的json_encoding PHP无法输出(PHP无法给出“ {[{}]}”,它始终为“ {“ 0” :[{{}]}“)

但不仅必须在5.6 PHP(必须再次使用服务器后缀选项)上使用SendGrid PHP客户端,否则仍然需要知道您需要两个项目:“ php-http-client-master”和“ sendgrid-php-master”(两个仓库)都没有记录:那么您需要执行以下操作:“ sendgrid-php-master”中的/lib/loader.php需要在最后添加这两行

               require_once '/your/path/to/php-http-client-master/lib/Client.php';
               require_once '/your/path/to/php-http-client-master/lib/Response.php';

您还需要添加此内容(SendGrid的草率程度更高)

             require_once __DIR__ . '/mail/TypeException.php';

顺便说一句,我也为此编辑了sendgrid-php-master\sendgrid-php.php

          <? php
             require __DIR__ . '/lib/loader.php';
          ?>

理论上添加composer意味着您可能可以避免所有这些情况,但是对于某些服务器,这是不可能的(在我的PHP项目的另一个分支上实现composer花费了3周的时间-我不再重复),因为composer引入了一个突破PHP处理包括和类自动加载方式的变化

PS:我已提醒SendGrid所有这些,您可能会很快发现它已清除