我想使用cURL向Sendgrid发送电子邮件。这是我已经使用了很长一段时间的工具,当我想发送一封简单的电子邮件时,一切都运行得很好。
但是现在,我尝试将附件文件与电子邮件一起发送。发生的事情是我在电子邮件中看到该文件,但它只显示1KB大小,无法下载该文件。
我在想这可能是一个路径问题。我尝试的路径(假设Php文件位于地址mywebsite.com/file.php
)如下:
我还尝试将平台的URL直接输入到文件路径参数中。
我从Sendgrid API获得的回复是{"message":"success"}
。
我跟随this guide,这是代码:
PHP
$html = '<p>Hello StackOverflow</p>';
$fileName = 'myDocument.pdf';
$filePath = 'http://mywebsite.com/documents'
$url = 'https://api.sendgrid.com/';
$user = [MY_USER];
$pass = [MY_PASS];
$js = array(
'sub' => array(':name' => array([MY_FIRSTNAME])),
);
$params = array(
'api_user' => $user,
'api_key' => $pass,
'to' => $to,
'subject' => $subject,
'html' => $html,
'from' => $from,
'fromname' => [MY_FROMNAME],
'x-smtpapi' => json_encode($js),
'files['.$fileName.']' => '@'.$filePath.'/'.$fileName
);
print_r($params); // AT THAT POINT, WHAT IS PRINTED IS EXACTLY WHAT I EXPECT
$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);
// Tell PHP not to use SSLv3 (instead opting for TLS)
curl_setopt($session, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_2);
curl_setopt($session, CURLOPT_RETURNTRANSFER, true);
// obtain response
$response = curl_exec($session);
curl_close($session);
答案 0 :(得分:0)
我找到了一个解决方案,这可能不是最优的,但至少可以起作用。
替换'files['.$fileName.']' => '@'.$filePath.'/'.$fileName
'files['.$fileName.']' => file_get_contents($filePath.'/'.$fileName)
。
我有点惊讶的是,复制Sendgrid API的文档不起作用,但也许有一个更清晰的解决方案可以使用它。如果是这样,请随意分享(而不是低估我的帖子)。