zend框架发送邮件

时间:2011-09-12 15:32:16

标签: zend-framework email

我需要通过smtp发送邮件。什么是最好的方法:在application.ini中声明所有内容,如here或为其编写模块?

有没有人有一个有效的例子?

此致 安德烈

1 个答案:

答案 0 :(得分:8)

resources.mail.transport.type = smtp
resources.mail.transport.host = "server.smtp.com"
resources.mail.transport.auth = login
resources.mail.transport.username = "username@email.com"
resources.mail.transport.password = "ultraPass"
resources.mail.transport.ssl = ssl
resources.mail.transport.port = 465
resources.mail.transport.register = true ; True by default

resources.mail.defaultFrom.email = thebank@bank.com
resources.mail.defaultFrom.name = "The bank"
resources.mail.defaultReplyTo.email = replyTo.jank@bank.com
resources.mail.defaultReplyTo.name = "replier"

以上是我在application.ini文件的production部分中的内容。

稍后,当我想发送邮件时,我会执行以下操作

    $view = $this->getView();

    $mail = new Zend_Mail();

    $emailText = $view->render( 'theEmailFileSomewhere.phtml' );

    $mail->addTo( $emailAddress, $usersfirstname )
            ->setSubject( 'Hi ' . $usersfirstname  . '!' )
            ->setBodyText( $emailText, $this->_charset ) //charset is utf-8
            ->send();

    return true;

我的专家是后来,在ini文件的开发部分,我可以轻松地将其更改为简单的文件邮件程序。因此,电子邮件将作为本地系统上的文件输出,而不是实际发送电子邮件。

另一个专家是,有人'安装'应用程序可以从ini文件中完成所有操作,如果这是你设计它的方式。

但是,您也可以设置资源来执行此操作。

与此相关的是,您的凭据和所有凭据都在.ini文件中,当您可能不想要它们时。

您可以做的是设置一个资源,该资源将从环境变量中提取凭据,以便信用卡永远不必成为应用程序的一部分。

如果您以这种方式设置资源,那么安装应用程序的任何人都必须知道设置这些环境变量,否则他们将很难自己搞清楚,除非您添加一些冗长的错误。

如果你很好奇,这就是我在ini的开发部分中所做的。

resources.mail.transport.type = file
resources.mail.transport.path = APPLICATION_PATH "/../data/testemails/"
resources.mail.transport.callback[] = "My_Service_Email"
resources.mail.transport.callback[] = "generateEmailFilename"
resources.mail.transport.register = true ; True by default

在这种情况下,My_Service_Email是我使用视图脚本发送电子邮件的类。在开发中,将调用generateEmailFilename以生成电子邮件文件的名称。它只是创建一个带有时间戳的文件名,以便电子邮件不会互相覆盖。这至少足以用于我的测试目的。大多数情况下,我只是想看到视图脚本中的文本正在进入电子邮件。