从本地服务器测试 SilverStripe 电子邮件联系表
Testing SilverStripe email contact forms from local server
我正在构建一个联系表单,该表单在提交时使用 SilverStripe 文档 (Introduction to frontend forms, and Simple 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();
}
编辑:2017 年 8 月 4 日
由于 per 已将 MAMP 中 php.ini 文件中的 sendmail 字段(在 MAMP/bin/php/php5.6.10/conf 和 MAMP/conf/php5.6.10 中)更新为:
; 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'
一切都无济于事...
是 - 使用 SilverStripe 电子邮件 class 发送的任何电子邮件都可以重定向以用于测试目的:
# File: conf/ConfigureFromEnv.php
if(defined('SS_SEND_ALL_EMAILS_TO')) {
Config::inst()->update("Email","send_all_emails_to", SS_SEND_ALL_EMAILS_TO);
}
然后这用于在此处覆盖电子邮件目的地:
# File email/Email.php
public function send($messageID = null) {
// ...
if($sendAllTo = $this->config()->send_all_emails_to) {
$subject .= " [addressed to $to";
$to = $sendAllTo;
// ...
因此,要利用它,请在您的环境配置中定义 SS_SEND_ALL_EMAILS_TO
:
# File: _ss_environment.php
define('SS_SEND_ALL_EMAILS_TO', 'your@email.com');
除了进行上面建议的 _ss_environment
更改外,在我的案例中测试电子邮件传递的真正障碍是 允许安全性较低的应用程序 与电子邮件帐户通信用于测试。
我最初是为此使用 Gmail,它不允许为具有两步身份验证的帐户启用安全性较低的应用程序。我本可以更改此安全功能,但我选择使用辅助的 Yahoo 电子邮件地址进行这些试用。
注意:此答案仅适用于此问题的测试性质(确保电子邮件功能正常执行);稍后将在开发中采取进一步措施,以符合安全电子邮件应用程序的资格。
希望这对处于类似情况的其他人有所帮助。
资源:
我正在构建一个联系表单,该表单在提交时使用 SilverStripe 文档 (Introduction to frontend forms, and Simple 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();
}
编辑:2017 年 8 月 4 日
由于 per 已将 MAMP 中 php.ini 文件中的 sendmail 字段(在 MAMP/bin/php/php5.6.10/conf 和 MAMP/conf/php5.6.10 中)更新为:
; 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'
一切都无济于事...
是 - 使用 SilverStripe 电子邮件 class 发送的任何电子邮件都可以重定向以用于测试目的:
# File: conf/ConfigureFromEnv.php
if(defined('SS_SEND_ALL_EMAILS_TO')) {
Config::inst()->update("Email","send_all_emails_to", SS_SEND_ALL_EMAILS_TO);
}
然后这用于在此处覆盖电子邮件目的地:
# File email/Email.php
public function send($messageID = null) {
// ...
if($sendAllTo = $this->config()->send_all_emails_to) {
$subject .= " [addressed to $to";
$to = $sendAllTo;
// ...
因此,要利用它,请在您的环境配置中定义 SS_SEND_ALL_EMAILS_TO
:
# File: _ss_environment.php
define('SS_SEND_ALL_EMAILS_TO', 'your@email.com');
除了进行上面建议的 _ss_environment
更改外,在我的案例中测试电子邮件传递的真正障碍是 允许安全性较低的应用程序 与电子邮件帐户通信用于测试。
我最初是为此使用 Gmail,它不允许为具有两步身份验证的帐户启用安全性较低的应用程序。我本可以更改此安全功能,但我选择使用辅助的 Yahoo 电子邮件地址进行这些试用。
注意:此答案仅适用于此问题的测试性质(确保电子邮件功能正常执行);稍后将在开发中采取进一步措施,以符合安全电子邮件应用程序的资格。
希望这对处于类似情况的其他人有所帮助。
资源: