我创建了一份就业申请表,允许申请人以pdf,doc或docx扩展名上传他们的简历。然后,我使用Sendgrid将他们的信息和简历通过电子邮件发送给人力资源部。
我通过测试发现,在发送电子邮件时收到错误:
参数附件[resume.pdf]不是utf8
如何在将每个上传到utf-8的文件编码到附加到电子邮件之前,我该如何解决这个问题呢?这会产生任何问题或分别修改用户上传的简历吗?
这是我用来通过SendGrid API发送的PHP Curl代码: (注意:我必须使用REST API,客户端Web服务器上未配置SMTP)
<?php
$mail['from'] = 'humanresources@email.org';
$mail['fromname'] = 'Human Resources';
$mail['to'] = 'person@email.com';
$mail['subject'] = character_limiter('Employment: '. $application['position'], 50);
$mail['html'] = '<p><strong>Name:</strong> '.$application['firstname'].' '.$application['lastname'].'</p>';
$mail['html'] .= '<p><strong>Position:</strong> '.$application['position'].'</p>';
$mail['html'] .= '<p><strong>Date:</strong> '.mdate('%m/%d/%Y %g:%i %A', $application['timestamp_saved']).'</p>';
$mail['html'] .= '<p><strong>Email:</strong> '.$application['email'].'</p>';
$mail['files['.$application['pdf'].']'] = '@saved_applications/'. $application['pdf'];
//Sendgrid Credientals
$mail['api_user'] = 'sendgrid_user';
$mail['api_key'] = 'sendgrid_pass';
print_r($mail);
// Generate curl request
$session = curl_init('https://sendgrid.com/api/mail.send.json');
curl_setopt ($session, CURLOPT_POST, true);
curl_setopt ($session, CURLOPT_POSTFIELDS, $mail);
curl_setopt($session, CURLOPT_HEADER, false);
curl_setopt($session, CURLOPT_RETURNTRANSFER, true);
// obtain response
$response = curl_exec($session);
curl_close($session);
// print everything out
$output = json_decode($response, TRUE);
print_r($output);
?>
答案 0 :(得分:1)
您拥有的代码应该可以工作(并在我测试时工作)。
您可能想要使用PHP library,而不是平坦的cURL。您可以通过以下方式从Web Web API send attachments获取:
<?php
$sendgrid = new SendGrid('username', 'password');
$mail = new SendGrid\Mail();
$mail->
addTo('humanresources@email.org')->
...
addAttachment('saved_applications/'. $application['pdf']);
$sendgrid->web->send($mail);
?>
答案 1 :(得分:0)
也许不使用sendgrid的Web服务API来发送这些消息,只需使用phpmailer并使用他们的外发邮件服务器smtp.sendgrid.net通过sendgrid通过SMTP发送消息。如果您以这种方式发送消息,我相信您不会收到此错误。请参阅https://github.com/PHPMailer/PHPMailer上的示例。