首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Sendinblue附件

Sendinblue附件
EN

Stack Overflow用户
提问于 2019-01-24 06:52:08
回答 4查看 11.4K关注 0票数 1

我试图发送附件pdf文件。我收到了电子邮件,但没有雅致。我试着用https://github.com/sendinblue/APIv3-php-library/blob/master/docs/Model/SendSmtpEmail.mdenter

代码语言:javascript
复制
 $sendSmtpEmail = new \SendinBlue\Client\Model\SendSmtpEmail(); 
    $sendSmtpEmail['to'] = array(array('email'=>'email@email.com'));
    $sendSmtpEmail['templateId'] = 39;
    $sendSmtpEmail['params'] = array(
    'NUMEROFACTURE'=> "12345",
    'CODECLIENT' => "1234567",
    'TOSEND' => "email1@email.net",
    'MONTANTFACTURE'=>  number_format(12, 2, ',', ' '),
    );
    $attachement = new \SendinBlue\Client\Model\SendSmtpEmailAttachment();
    $attachement['url']= __DIR__'/facture/Facture-'.$row["ClePiece"].'.pdf';
    $attachement['name']= 'Facture-'.$row["ClePiece"].'.pdf';
    $attachement['content']= "utf-8";
    $sendSmtpEmail['attachment']= $attachement;
    $sendSmtpEmail['headers'] = array('Content-Type'=>'application/pdf','Content-Disposition'=>'attachment','filename'=>'Facture-'.$row["ClePiece"].'.pdf',"charset"=>"utf-8");


$config = SendinBlue\Client\Configuration::getDefaultConfiguration()->setApiKey('api-key', 'YOUR_API_KEY');
$apiInstance = new SendinBlue\Client\Api\SMTPApi(new GuzzleHttp\Client(),$config);

try {
    $result = $apiInstance->sendTransacEmail($sendSmtpEmail);
    print_r($result);
} catch (Exception $e) {
    echo 'Exception when calling SMTPApi->sendTransacEmail: ', $e->getMessage(), PHP_EOL;
}
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2019-01-25 06:58:16

代码语言:javascript
复制
    $dataEmail= new \SendinBlue\Client\Model\SendEmail();
    $dataEmail['emailTo']       = ['abc@example.com', 'asd@example.com'];
    $dataEmail['attachmentUrl'] = "http://www.ac-grenoble.fr/ia07/spip/IMG/pdf/tutoriel_pdf_creator-2.pdf";

    // if you want to use content attachment base64 
    // $b64Doc = chunk_split(base64_encode($data));
    // $attachment_array = array(array(
    //                              'content'=>$b64Doc,
    //                              'name'=>'Facture-'.$row["ClePiece"].'.pdf'
    //                          ));
    //  $dataEmail['attachment']    = $attachment_array;
    //Don't forget to delete attachmentUrl

    $templateId = 39;
    $dataEmail  = $dataEmail;

    $config = SendinBlue\Client\Configuration::getDefaultConfiguration()->setApiKey('api-key', 'YOUR_API_KEY');

    $apiInstance = new SendinBlue\Client\Api\SMTPApi(new GuzzleHttp\Client(),$config);
    try {
        $result = $apiInstance->sendTemplate($templateId, $dataEmail);
        print_r($result);
    } catch (Exception $e) {
        echo 'Exception when calling SMTPApi->sendTemplate: ', $e->getMessage(), PHP_EOL;
    }
票数 0
EN

Stack Overflow用户

发布于 2019-01-24 07:40:29

根据SendSmtpEmailAttachment文档,有两种方法可以使用urlcontent来附加文件。

附件的 url \绝对url(没有本地文件)。 动态生成的附件的content Base64编码块数据

您错误地将"utf-8“分配给内容。这意味着您需要将pdf数据转换为base64块数据。首先,将服务器中的pdf路径作为$pdfdocPath获取。使用file_get_contents方法获取pdf内容,并使用base64_encode方法对其进行编码。最后,使用chunk_split将内容分割成小块,如下所示:

代码语言:javascript
复制
$sendSmtpEmail = new \SendinBlue\Client\Model\SendSmtpEmail(); 
$sendSmtpEmail['to'] = array(array('email'=>'email@email.com'));
$sendSmtpEmail['templateId'] = 39;
$sendSmtpEmail['params'] = array(
'NUMEROFACTURE'=> "12345",
'CODECLIENT' => "1234567",
'TOSEND' => "email1@email.net",
'MONTANTFACTURE'=>  number_format(12, 2, ',', ' '),
);
$pdfdocPath = __DIR__.'/facture/Facture-'.$row["ClePiece"].'.pdf';
$b64Doc = chunk_split(base64_encode(file_get_contents($pdfdocPath)));
$attachement = new \SendinBlue\Client\Model\SendSmtpEmailAttachment();
$attachement['name']= 'Facture-'.$row["ClePiece"].'.pdf';
$attachement['content']= $b64Doc;
$sendSmtpEmail['attachment']= $attachement;
$sendSmtpEmail['headers'] = array('Content-Type'=>'application/pdf','Content-Disposition'=>'attachment','filename'=>'Facture-'.$row["ClePiece"].'.pdf',"charset"=>"utf-8");

更新:

我检查了APIv3 3-php库源代码,发现构造函数将对namecontent进行验证。

代码语言:javascript
复制
$dataEmail = new \SendinBlue\Client\Model\SendEmail();
$dataEmail['emailTo'] = ['abc@example.com', 'asd@example.com'];
// PDF wrapper
$pdfDocPath = __DIR__.'/facture/Facture-'.$row["ClePiece"].'.pdf';
$content = chunk_split(base64_encode(file_get_contents($pdfDocPath)));
// Ends pdf wrapper
$attachment_item = array(
        'name'=>'Facture-'.$row["ClePiece"].'.pdf',
        'content'=>$content
);
$attachment_list = array($attachment_item);
// Ends pdf wrapper

$dataEmail['attachment']    = $attachment_list;

$templateId = 39;

$config = SendinBlue\Client\Configuration::getDefaultConfiguration()->setApiKey('api-key', 'YOUR_API_KEY');

$apiInstance = new SendinBlue\Client\Api\SMTPApi(new GuzzleHttp\Client(),$config);
try {
    $result = $apiInstance->sendTemplate($templateId, $dataEmail);
    print_r($result);
} catch (Exception $e) {
    echo 'Exception when calling SMTPApi->sendTemplate: ', $e->getMessage(), PHP_EOL;
}
票数 3
EN

Stack Overflow用户

发布于 2020-01-29 18:10:59

根据文献资料SMTPApi->sendTransacEmail函数获取SendSmtpEmail对象。该对象对attachment属性有限制:

如果templateId被传递并采用新模板语言格式,那么只接受附件url。如果模板采用旧模板语言格式,则忽略attachment

但是SMTPApi->sendTemplate函数没有这个限制。

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

https://stackoverflow.com/questions/54340866

复制
相关文章

相似问题

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