【问题标题】:zend framework sending mailzend 框架发送邮件
【发布时间】:2011-09-13 08:46:04
【问题描述】:

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

谁有一个可行的例子?

问候 安德烈亚

【问题讨论】:

    标签: zend-framework email


    【解决方案1】:
    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 文件的生产部分中的内容。

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

        $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 来生成电子邮件文件的名称。它只是创建一个带有时间戳的文件名,这样电子邮件就不会相互覆盖。这至少对于我的测试目的来说已经足够了。大多数情况下,我只想看到视图脚本中的文本正在发送到电子邮件。

    【讨论】:

    • 这就像一个魅力!谢谢你的详细回答;)
    猜你喜欢
    • 2016-02-14
    • 1970-01-01
    • 2012-07-18
    • 2012-01-20
    • 1970-01-01
    • 2016-07-18
    • 1970-01-01
    • 2011-06-24
    • 2011-11-21
    相关资源
    最近更新 更多