vernes / yiimailer
使用 PHPMailer 发送带有布局的电子邮件的 Yii 扩展
Requires
- php: >=5.5.0
- phpmailer/phpmailer: ^6.0
This package is not auto-updated.
Last update: 2024-09-25 17:31:24 UTC
README
使用 PHPMailer 发送带有布局的电子邮件的 Yii (v1.1.x) 扩展
功能
- 基于 PHPMailer
- 支持 Yii 布局和翻译
- 支持 Web 和控制台应用程序
- 发送包含嵌入图像的完整 HTML 电子邮件
- 与视图一起工作,就像在 Yii 中通常做的那样
- 使用测试模式保存电子邮件而不是发送它们(当您没有本地安装邮件服务器时非常有用)
安装
- 使用 composer 安装:
composer require vernes/yiimailer
- 将 'vendor.vernes.yiimailer.YiiMailer' 行添加到主和/或控制台 yii 配置中的导入
- 将 mail.php 配置文件复制到 protected/config 或在 'params' 下的 'YiiMailer' 键中添加配置数组
- 在 protected/views/layouts/ 中创建 email 布局文件 mail.php(默认路径,可以在配置中更改)
- 在 protected/views/mail/ 中创建您想要使用的所有视图(默认路径,可以在配置中更改)
- 将您想要嵌入电子邮件中的所有图像放入 images/mail/(默认路径,可以在配置中更改)
注意
在控制台应用程序中,别名 'webroot' 可能与 Web 应用程序中的不同。请参阅 yiisoft/yii#1267。最好的解决方案是直接在 config/console.php 中设置所需的别名,例如。
Yii::setPathOfAlias('webroot.images.mail', '/path/to/your/images/mail/dir');
另一个解决方案是覆盖 protected/yiic.php 并在那里设置 'webroot' 别名(请参阅示例文件)。
用法
在控制器或控制台命令中实例化 YiiMailer 并传递视图和数据数组
$mail = new YiiMailer('contact', array('message' => 'Message to send', 'name' => 'John Doe', 'description' => 'Contact form'));
或
$mail = new YiiMailer(); $mail->setView('contact'); $mail->setData(array('message' => 'Message to send', 'name' => 'John Doe', 'description' => 'Contact form'));
布局会自动从配置中设置,但您也可以使用以下方式覆盖它
$mail->setLayout('layoutName');
设置属性
$mail->setFrom('from@example.com', 'John Doe'); $mail->setTo(Yii::app()->params['adminEmail']); $mail->setSubject('Mail subject');
您可以使用所有通常使用的 PHPMailer 属性。
最后发送电子邮件
if ($mail->send()) { Yii::app()->user->setFlash('contact','Thank you for contacting us. We will respond to you as soon as possible.'); } else { Yii::app()->user->setFlash('error','Error while sending email: '.$mail->getError()); }
发送简单消息
您可以通过不使用布局和视图来发送电子邮件
$mail = new YiiMailer(); //$mail->clearLayout();//if layout is already set in config $mail->setFrom('from@example.com', 'John Doe'); $mail->setTo(Yii::app()->params['adminEmail']); $mail->setSubject('Mail subject'); $mail->setBody('Simple message'); $mail->send();
或者,您也可以通过设置布局但不需要特定视图(设置布局和设置正文)或通过设置视图但不需要布局(清除布局并设置视图)来发送带有布局的电子邮件消息。
设置地址
当使用设置地址的方法(setTo(), setCc(), setBcc(), setReplyTo())时,以下任何一项都是有效的参数
$mail->setTo('john@example.com'); $mail->setTo(array('john@example.com','jane@example.com')); $mail->setTo(array('john@example.com'=>'John Doe','jane@example.com'));
发送附件
您可以使用 setAttachemnt() 方法发送一个或多个附件
$mail->setAttachment('something.pdf'); $mail->setAttachment(array('something.pdf','something_else.pdf','another.doc')); $mail->setAttachment(array('something.pdf'=>'Some file','something_else.pdf'=>'Another file'));
测试模式
当在没有安装邮件服务器的情况下本地工作,将电子邮件作为文件保存而不是尝试发送它们并获得过程中出现错误时可能很有用。要使用测试模式,您必须指定要保存电子邮件的目录路径,并在您的配置中将 'testMode' 属性设置为 'true'
'savePath' => 'webroot.assets.mail', 'testMode' => true,
电子邮件将保存为 .eml 文件,您可以使用像 Mozilla Thunderbird 这样的软件来打开它们。
使用 SMTP
如果您想使用 SMTP,请配置配置中的适当属性。例如 GMail 的配置设置
'Mailer' => 'smtp', 'Host' => 'smtp.gmail.com', 'Port' => 465, 'SMTPSecure' => 'ssl', 'SMTPAuth' => true, 'Username' => 'your_email@gmail.com', 'Password' => 'your_password',
您也可以在发送电子邮件之前配置此内容
$mail->setSmtp('smtp.gmail.com', 465, 'ssl', true, 'your_email@gmail.com', 'your_password');
示例
包括两个示例:一个用于 yii Web 应用程序的标准联系表单,另一个用于 yii 控制台应用程序。