2014-09-10 105 views
0

我正在使用SendGrid進行卷曲方法的客戶項目。SendGrid - 捲曲php外部文件附件損壞

所有工作正常,但我的電子郵件與SendGrid發送附加(ir)文件(s)被打破。

這裏是我的代碼:

$documentList = array(
    "DOC1.php" => "http://www.customerdomain.com/my/path/where/my/attachment/file/is/myfile.pdf" 
); 


$params = array(
         'api_user' => $user; 
         'api_key' => $pass, 
         'x-smtpapi' => json_encode($json_string), 
         'from'  => $from, 
         'to'  => $to, 
         'subject' => $subject, 
         'html'  => $mailHtml, 
         'text'  => $mailText 
); 


if(count($documentList)>0){ 
    foreach($documentList as $fileName=>$documentPath){ 
     $params['files['.$fileName.']'] = $documentPath; 
    } 
} 

$request = $url.'api/mail.send.json'; 

// Generate curl request 
$session = curl_init($request); 
// Tell curl to use HTTP POST 
curl_setopt ($session, CURLOPT_POST, true); 
// Tell curl that this is the body of the POST 
curl_setopt ($session, CURLOPT_POSTFIELDS, $params); 
// Tell curl not to return headers, but do return the response 
curl_setopt($session, CURLOPT_HEADER, false); 
curl_setopt($session, CURLOPT_RETURNTRANSFER, true); 


// obtain response 
$response = curl_exec($session); 
curl_close($session); 

當我沒有在我的陣列的關鍵擴展文件,我已經包含了相關值的文本文件。

我覺得我並不孤單有這個問題,好吧,如果你有任何想法解決這個問題,謝謝你的幫助!

回答

3

您遇到的問題是因爲您爲SendGrid提供了文件的URL而不是文件本身,並且SendGrid的API需要該文件。

爲了讓您的代碼工作,只需將$documentList變量更改爲:

$documentList = array(
    "DOC1.pdf" => "@" . realpath("/path/where/my/attachment/file/is/myfile.pdf") 
); 

說明對這種文件上傳可以在this StackOverflow Question隨處可見,但是,否則你可能想使用curl_file_create,要做到這一點。


然而,或許要做到這一點的最好/最簡單的方法是使用SendGrid's PHP Library這使得sending attachments, trivially simple.

require("path/to/sendgrid-php/sendgrid-php.php"); 
$sendgrid = new SendGrid('username', 'password'); 
$email = new SendGrid\Email(); 
$email->addTo('[email protected]')-> 
     setFrom('[email protected]')-> 
     setSubject('Subject goes here')-> 
     setText('Hello World!')-> 
     setHtml('<strong>Hello World!</strong>') 
     addAttachment("../path/to/file.txt"); 
$sendgrid->send($email); 
+0

'curl_file_create' working for me – Shahbaz 2016-11-06 19:19:14

0

我最初的問題是,因爲路徑是自動生成的鏈接,這就是爲什麼我沒有使用url而不是真實路徑。

無論如何,我改變了我的代碼,現在使用文件realpath(和@之前)後提到的mimetype的實時路徑。

現在看起來很好。

我想感謝您的幫助。

Regards