2016-08-16 202 views
4

我是使用sendgrid web api v3的新手。链接hereSendgrid使用web api发送带附件的邮件v3

现在。使用那里api'POST https://api.sendgrid.com/v3/mail/send'发送一个简单的html很容易,但是我有这个实例,我们将附加一个文件(csv/xls,pdf),我似乎无法做到。

这里是我下面的代码:

我的功能postSendMail

public function postSendMail($data = []) 
{ 
    if (! arrayHasValue($data)) $this->error(__METHOD__, "Data is empty."); 

    $request = Curl::to($this->apiUrl.'mail/send')   
     ->withHeader('Authorization: Bearer '. $this->apiKey) 
     ->withData($data) 
     ->asJson(true) 
     ->enableDebug(storage_path('logs/laravel-'.php_sapi_name().'.log')) 
     ->post(); 


    return $request; 
} 

//my instance 
$sendgrid = new Sendgrid; 
    $data = [ 
       'personalizations' => [ 
         [ 
          'to' => [ 
           [ 'email' => '[email protected]' ] 
          ], 
          'subject' => 'Hello, World!' 
         ] 
        ], 
       'from' => [ 
         'email' => '[email protected]', 
         'name' => 'my_site' 
        ], 
       'content' => [ 
         [ 
          'type' => 'text', 
          'value' => 'Hello, World!' 
         ] 
        ], 
       'track_settings' => [ 
         [ 
          'click_tracking' => true, 
          'open_tracking' => true 
         ] 
        ], 
       'attachments' => [ 
         [ 
          'content' => base64_encode(config('global.UPLOAD_PATH') . '/my_file.pdf'), 
          'type' => 'application/pdf', 
          'filename' => 'my_file.pdf', 
          'disposition' => 'attachment' 
         ] 
        ] 
       ]; 

    $lists = $sendgrid->postSendMail($data); 

邮件发送成功,但是当我查看附加文件时,它已损坏/无法查看。谁能帮我? :(

请帮

回答

2

的问题是,你是不是把文件读入一个对象,然后编码对象;你可编码含有文件路径的字符串

'content' => base64_encode(config('global.UPLOAD_PATH') . '/my_file.pdf') 

在所有测试你的附件很可能是同样大小,比实际的文件,结果小

尝试类似:

$imagedata = file_get_contents(config('global.UPLOAD_PATH') . '/my_file.pdf'); 
$base64 = base64_encode($imagedata); 
+0

忘了回答我的问题。但你是对的。 :) –