把 common/config/main-local.php 下的 mailer 注释掉:
'mailer'=>[
'class'=>'yii\swiftmailer\Mailer',
'viewPath'=>'@common/mail',
'useFileTransport'=>false,
'transport'=>[
'class'=>'Swift_SmtpTransport',
'host'=>'', //自己申请邮箱时的服务器
'username'=>'', //申请时的账号
'password'=>'', //申请时的密码
'port'=>'25', //端口
'encryption'=>'tls' //一种加密方式,报错时删除它再试试(我这里就不支持这种加密方式)
],
'messageConfig'=>[
'charset'=>'UTF-8', //设置字符集
'from'=>['???'=>???] //给发送的邮箱起个别名
]
]
在任意控制下创建一个方法:
$file_size=filesize(路径);
$fp=fopen(路径,'r'); //只读模式打开
$buff=1024;
$file_count=0;
$file_con='';
while(!feof($fp)&&file_count<$file_size){
$file_con.=fread($fp,$buff); //因为文件每读取一次只要不关闭或重置,指针就会停在上次最后读取的位置。下次继续读取。所以长度不必改变。
$file_count+=$buff;
}
fclose($fp);
$mail=\Yii::$app->mailer->compose();
$mail->attachContent($file_con,['filename'=>'demo.docx','contentType'=>'application/octet-stream']);
//附件内容 //附件名称 //文件类型
$mail->setTo(收件人账号);
$mail->setSubject("标题");
$mail->setHtmlBody("内容");
$mail->setHtmlBody("内容");
$mail->send();
//发送
unset($file_con); //销毁附件内容字符串
//发送
unset($file_con); //销毁附件内容字符串