自己在yii2/laravel5.4两个框架上得到验证,这次直接上代码使用的是yii2,需要laravel代码的同学可以私我
废话不多说,直接上干货
DEMO下载地址:http://www.sendcloud.net/doc/email_v2/code/
下载完成以后就能看到官方给我们的例子
function send_mail() {
$url = 'http://api.sendcloud.net/apiv2/mail/send';
//就是一些配置参数,建议写成配置文件
$API_USER = '...';
$API_KEY = '...';
$param = array(
'apiUser' => $API_USER, # 使用api_user和api_key进行验证
'apiKey' => $API_KEY,
'from' => '[email protected]', # 发信人,用正确邮件地址替代
'fromName' => 'SendCloud',
'to' => '[email protected]', # 收件人地址,用正确邮件地址替代,多个地址用';'分隔
'subject' => 'Sendcloud php webapi with attachment example',
'html' => '欢迎使用SendCloud',
'respEmailId' => 'true'
);
//上传的附近路劲信息
$file = "./test.txt"; #你的附件路径1
$handle = fopen($file,'rb');
$content = fread($handle,filesize($file));
$file2 = "./test2.txt"; #你的附件路径2
$handle2 = fopen($file2,'rb');
$content2 = fread($handle2,filesize($file2));
$eol = "\r\n";
$data = '';
$mime_boundary=md5(time());
// 配置参数
foreach ( $param as $key => $value ) {
$data .= '--' . $mime_boundary . $eol;
$data .= 'Content-Disposition: form-data; ';
$data .= "name=" . $key . $eol . $eol;
$data .= $value . $eol;
}
// 配置文件
$data .= '--' . $mime_boundary . $eol;
$data .= 'Content-Disposition: form-data; name="attachments"; filename="filename.txt"' . $eol;
$data .= 'Content-Type: text/plain' . $eol;
$data .= 'Content-Transfer-Encoding: binary' . $eol . $eol;
$data .= $content . $eol;
$data .= '--' . $mime_boundary . $eol;
$data .= 'Content-Disposition: form-data; name="attachments"; filename="filename2.txt"' . $eol;
$data .= 'Content-Type: text/plain' . $eol;
$data .= 'Content-Transfer-Encoding: binary' . $eol . $eol;
$data .= $content2 . $eol;
$data .= "--" . $mime_boundary . "--" . $eol . $eol;
$options = array(
'http' => array(
'method' => 'POST',//邮件发送必须是post
'header' => 'Content-Type: multipart/form-data;boundary='.$mime_boundary . $eol,
'content' => $data
));
$context = stream_context_create($options);
$result = file_get_contents($url, FILE_TEXT, $context);
return $result;
fclose($handle);
fclose($handle2);
}
以上就是官方给我们提供的demo,也没有什么特别需要主要的.根据自己项目需求自己修改就好,下面给出yii2框架结合sendcloud发送邮件
public static function sendMailUsingSendCloud($email='',$file=[]){
if (empty($email))return json_encode(['result'=>false,"statusCode"=>1,'msg'=>'邮箱不正确'],JSON_UNESCAPED_UNICODE);
$cache = \Yii::$app->cache;
//验证email请求时间
if ($cache->exists($email)){
return json_encode(['result'=>false,"statusCode"=>1,'msg'=>'请求频繁,请稍后重试'],JSON_UNESCAPED_UNICODE);
}
//缓存2分钟
$cache->add($email,1,2);
$url = 'http://api.sendcloud.net/apiv2/mail/send';
$param = array(
'apiUser' => \Yii::$app->params['sendcloud_API_user'], # 使用api_user和api_key进行验证
'apiKey' => \Yii::$app->params['sendcloud_API_key'],
'from' => \Yii::$app->params['sendcloud_from'], # 发信人,用正确邮件地址替代
'mail_from' => \Yii::$app->params['sendcloud_from'], # 发信人,用正确邮件地址替代
'fromName' => \Yii::$app->params['sendcloud_fromName'],
'to' => $email, # 收件人地址,用正确邮件地址替代,多个地址用';'分隔
'subject' => \Yii::$app->params['sendcloud_subject'],
'html' => \Yii::$app->params['sendcloud_html'],
'respEmailId' => 'true'
);
$eol = "\r\n";
$data = '';
$mime_boundary=md5(time());
// 配置参数
foreach ( $param as $key => $value ) {
$data .= '--' . $mime_boundary . $eol;
$data .= 'Content-Disposition: form-data; ';
$data .= "name=" . $key . $eol . $eol;
$data .= $value . $eol;
}
//这步就是结合官方示例对多附件的一个处理
if (!empty($file)){
foreach ( $file as $key => $val ){
$files = $val['download_url']; #你的附件路径1
$content = file_get_contents($files);
$data .= '--' . $mime_boundary . $eol;
$data .= 'Content-Disposition: form-data; name="attachments"; filename="'.$val['file_name'].'"' . $eol;
$data .= 'Content-Type: text/plain' . $eol;
$data .= 'Content-Transfer-Encoding: binary' . $eol . $eol;
$data .= $content . $eol;
}
}
$data .= "--" . $mime_boundary . "--" . $eol . $eol;
$options = array(
'http' => array(
'method' => 'POST',
'header' => 'Content-Type: multipart/form-data;boundary=' . $mime_boundary . $eol,
'content' => $data
));
$context = stream_context_create($options);
$result = file_get_contents($url, FILE_TEXT, $context);
//可以根据自己情况.给每次发送邮件做记录
return $result;
}
以上就是通过yii2结合sencloud发送邮件的功能,其实和官网给的示例变动不是很多,我只不过就封装了一下该方法,方便以后使用,更加灵活
自己遇到的一个小问题:
可能有些同学可能就会问了.问什么我发送的邮件会出现谁谁谁代发的情况
其实官方FAQ也说明了,链接 http://www.sendcloud.net/doc/faq/
官方说的非常明了.这个东西啊.只要保证了mail_form和from一致,就不会显示代发,但是网易邮箱除外,大家注意一下就好了
大家如果有喜欢我的,可以点一下关注.我会不定时更新平时一些新技术和遇到的一些问题,当然大家有不懂的也可以问我,大家一起相互学习进步