mouf / utils.mailer.mail-interface
此包包含描述邮件的接口和类。它还包括MailerService接口,任何可以发送邮件的服务都应该实现此接口。您应该使用实现此接口的包(如SmtpMailer包)。
v2.2.0
2018-05-03 12:58 UTC
Requires
- php: >=5.3.0
- pelago/emogrifier: ^2.0
- soundasleep/html2text: ~0.2.0
README
Mouf 邮件系统
Mouf 框架仅是一个IOC框架。因此,它不提供管理任何类型缓存的方法。希望Mouf团队还提供了一系列用于管理发送邮件的包。
邮件架构
在Mouf中,通过MailServices发送电子邮件。
Mouf提供了4种邮件服务的实现。如果您愿意,可以提供自己的。
默认情况下,Mouf提供以下3种实现
- SwiftMailService:使用SMTP服务器发送邮件的邮件服务(这是使用Swift mail库的包装器)。
- SmtpMailService:使用SMTP服务器发送邮件的邮件服务(这是使用Zend_Mail库的包装器)。
- DBMailService:不发送任何邮件。相反,它将邮件写入MySQL数据库。它可以稍后转发邮件到另一个邮件服务,该服务将实际发送邮件。此邮件服务器在包utils/mailer/db-mail-service中可用。
每个邮件服务都必须扩展包utils/mailer/mail-interface中的一部分MailServiceInterface
接口。
邮件服务接口
每个实现MailServiceInterface
的类提供一种简单的方法来发送邮件
interface MailServiceInterface { /** * Sends the mail passed in parameter. * * @param MailInterface $mail The mail to send. */ function send(MailInterface $mail); }
作为参数传递的邮件必须实现MailInterface
接口。希望Mouf提供了一个Mail
类来做到这一点!
例如,要发送邮件,只需编写以下代码
$mailService = Mouf::getSmtpMailService(); $mail = new Mail(); $mail->setBodyText("This is my mail!"); $mail->setBodyHtml("This is my <b>mail</b>!"); $mail->setFrom(new MailAddress("my@server.com", "Server")); $mail->addToRecipient(new MailAddress("david@email.com", "David")); $mail->setTitle("My mail"); $mailService->send($mail);
上面的代码假设您在Mouf中配置了一个名为"smtpMailService"的实例。
MailInterface
接口支持
- 文本/HTML邮件(
setBodyText
和setBodyHtml
方法) - 多个收件人(
addToRecipient
方法) - 多个Cc收件人(
addCcRecipient
方法) - 多个Bcc收件人(
addBccRecipient
方法) - 文件附件(
addAttachment
方法)
邮件地址以MailAddress
对象的形式传递,该对象包含两个字符串:邮件地址和别名。
自动生成文本正文
在发送邮件时,发送两个正文是很好的做法:一个在纯文本中,一个在HTML中。忘记纯文本,你的邮件可能会被标记为垃圾邮件。然而,大多数时候,用户会以HTML的形式查看邮件。只能读取纯文本的邮件客户端现在非常罕见。
Mail
类可以帮助你在这里。实际上,它会从HTML中自动生成邮件的纯文本版本,通过删除所有标签。
$mail = new Mail(); $mail->setBodyHtml("This is my <b>mail</b>!"); // No need to call $mail->setBodyText()
如果您想显式禁用纯文本生成,可以调用此方法
$mail = new Mail(); $mail->setBodyHtml("This is my <b>mail</b>!"); // Disable plaing text generation from HTML. The mail will NOT contain the plain text part. $mail->autoCreateBodyText(false);