mouf/utils.mailer.mail-interface

此包包含描述邮件的接口和类。它还包括MailerService接口,任何可以发送邮件的服务都应该实现此接口。您应该使用实现此接口的包(如SmtpMailer包)。

v2.2.0 2018-05-03 12:58 UTC

This package is auto-updated.

Last update: 2024-09-15 04:31:21 UTC


README

Latest Stable Version Latest Unstable Version License Scrutinizer Code Quality

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邮件(setBodyTextsetBodyHtml方法)
  • 多个收件人(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);