【问题标题】:Testing SilverStripe email contact forms from local server从本地服务器测试 SilverStripe 电子邮件联系表格
【发布时间】:2017-08-31 16:42:36
【问题描述】:

我正在构建一个联系表单,它使用 SilverStripe 文档(Introduction to frontend formsSimple contact form)中提供的方法组合在提交时发送电子邮件。

代码(包含在下面)似乎工作正常,但我想知道是否可以从本地服务器(在我的例子中为 MAMP)发送测试电子邮件以正确测试功能。

在此先感谢

public function ContactForm() {
        $form = Form::create(
            $this,
            __FUNCTION__,
            FieldList::create(
                TextField::create('Name','')
                    ->setAttribute('placeholder','Name*')
                    ->addExtraClass('form-field'),
                EmailField::create('Email','')
                    ->setAttribute('placeholder','Email*')
                    ->addExtraClass('form-field'),
                TextareaField::create('Message','')
                    ->setAttribute('placeholder','Message*')
                    ->addExtraClass('form-field')
            ),
            FieldList::create(
                FormAction::create('submit', 'Send Message')
                    ->setUseButtonTag(true)
                    ->addExtraClass('text-button')
            ),
            RequiredFields::create('Name','Email','Message')            
        );

        $form->addExtraClass('contact-form');

        return $form;
    }


    public function submit($data, $form){
        $email = new Email();

        $email->setTo('email@email.com');
        $email->setFrom($data['Email']);
        $email->setSubject("Contact Message from {$data["Name"]}");

        $messageBody = "
            <p><strong>Name:</strong> {$data['Name']}</p>
            <p><strong>Message:</strong> {$data['Message']}</p>
        ";
        $email->setBody($messageBody);
        $email->send();

        $form->sessionMessage("Thanks for your message, I'll get back to you as soon as I can",'good');

        return $this->redirectBack();
    }

编辑:8/04/17

per 已将 MAMP(MAMP/bin/php/php5.6.10/conf 和 MAMP/conf/php5.6.10)中 php.ini 文件中的 sendmail 字段更新为:

; For Unix only.  You may supply arguments as well (default: "sendmail -t -i").
;sendmail_path =/usr/sbin/sendmail -t -i -f  ryanachten@gmail.com

per 已更新 mysite/_config/config.yml 以包含:

Email:
  send_all_emails_to: 'ryanachten@gmail.com'

一切都无济于事......

【问题讨论】:

    标签: php forms email mamp silverstripe


    【解决方案1】:

    是的 - 使用 SilverStripe 电子邮件类发送的任何电子邮件都可以重定向用于测试目的:

    # File: conf/ConfigureFromEnv.php
    if(defined('SS_SEND_ALL_EMAILS_TO')) {
        Config::inst()->update("Email","send_all_emails_to", SS_SEND_ALL_EMAILS_TO);
    }
    

    Reference

    然后这用于覆盖此处的电子邮件目的地:

    # File email/Email.php
    public function send($messageID = null) {
        // ...
        if($sendAllTo = $this->config()->send_all_emails_to) {
            $subject .= " [addressed to $to";
            $to = $sendAllTo;
            // ...
    

    Reference

    因此,要利用它,请在您的环境配置中定义 SS_SEND_ALL_EMAILS_TO

    # File: _ss_environment.php
    define('SS_SEND_ALL_EMAILS_TO', 'your@email.com');
    

    【讨论】:

    • 忘记了电子邮件环境定义。但是,已添加此内容,但仍无法将电子邮件从表单发送到 Gmail 帐户。回显电子邮件对象的属性显示已分配预期值,但是执行.send() 时似乎没有任何反应。奇怪的是,以前的一些测试已发送到“垃圾邮件”文件夹,但我无法复制这些结果。看看 Silverstripe 上下文之外,是否需要在 MAMP php.ini 文件中配置 SMTPsendmail_path = 才能使其工作? (在 OS X 中工作)
    • 这是一个不同的问题,但在 Stackoverflow 上已经有很多其他相同问题的示例
    • 你完全正确;应该澄清这个问题的范围。是的,SO 上的现有帖子非常宝贵。我不确定这个问题的原因是否在于我的 SilverStripe 或 MAMP 设置(因此发布了一个附加问题)。出于测试目的,我已经在一定程度上解决了这个问题 - 将在下面发布。
    【解决方案2】:

    除了上面建议的 _ss_environment 更改之外,在我的案例中测试电子邮件传递的真正障碍是允许不太安全的应用与用于测试的电子邮件帐户进行通信。

    我最初为此使用 Gmail,它不允许为具有两步身份验证的帐户启用不太安全的应用程序。我本可以更改此安全功能,但选择使用辅助的 Yahoo 电子邮件地址进行这些试验。

    注意:此答案仅适用于该问题的测试性质(确保电子邮件功能正常执行);稍后将在开发过程中采取进一步措施,以符合安全电子邮件应用程序的要求。

    希望这对处于类似情况的其他人有所帮助。

    资源:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-27
      • 2013-06-12
      • 2012-02-25
      • 2017-10-19
      • 1970-01-01
      相关资源
      最近更新 更多