php - 从本地服务器测试 SilverStripe 电子邮件联系表单

标签 php forms email mamp silverstripe

我正在构建一个联系表单,该表单在提交后会使用 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('<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="fc99919d9590bc99919d9590d29f9391" rel="noreferrer noopener nofollow">[email protected]</a>');
        $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();
    }

编辑:2017 年 8 月 4 日

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

; For Unix only.  You may supply arguments as well (default: "sendmail -t -i").
;sendmail_path =/usr/sbin/sendmail -t -i -f  <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="05777c646b64666d71606b456268646c692b666a68" rel="noreferrer noopener nofollow">[email protected]</a>

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

Email:
  send_all_emails_to: '<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="c0b2b9a1aea1a3a8b4a5ae80a7ada1a9aceea3afad" rel="noreferrer noopener nofollow">[email protected]</a>'

一切都无济于事...

最佳答案

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

# 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', '<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="1e67716b6c5e7b737f7772307d7173" rel="noreferrer noopener nofollow">[email protected]</a>');

关于php - 从本地服务器测试 SilverStripe 电子邮件联系表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43241833/

相关文章:

php - 向 woocommerce_email_customer_details 或电子邮件的任何其他部分添加一个新字段

php - 使用 php 脚本和连接检查外部服务器数据库的可用性

javascript - Yii2 - 选择下拉列表并为输入字段设置值

javascript - 延迟表单提交和显示重定向覆盖div

ruby - 在 Rails 中创建通用表单

ruby-on-rails - Debian Wheezy 上的 Redmine 2.2 中的电子邮件 : getaddrinfo: Name or service not known

php - 通过电子邮件验证链接

javascript - 如何在动态 li 中为第一个选项卡添加事件类

php - Jquery Ui 自动完成标签的重复结果

python - Django 表单保存问题 AttributeError 'tuple' object has no attribute 'get'