2016-08-16 4 views
4

Я новичок в использовании sendgrid web api v3. ссылка hereSendgrid отправка почты с приложением с помощью web api v3

Прямо сейчас. Легко было отправить простой html, используя api 'POST https://api.sendgrid.com/v3/mail/send', но у меня есть этот экземпляр, где мы будем прикреплять файл (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') 

Все ваши вложения в тестах, вероятно, тот же размер, и меньше, чем фактический файл в результате

Try что-то вроде:.

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

забыл ответить на мой вопрос. но вы правы. :) –

Смежные вопросы