2017-04-05 132 views
2

形式我建立它发送使用SilverStripe文档(Introduction to frontend formsSimple contact form)中提供的方法结合起来,在提交电子邮件联系表单。测试SilverStripe电子邮件联系,从本地服务器

的代码(下面附带)似乎是工作正常,但是我想知道是否有可能从本地服务器发送电子邮件测试(在我的情况,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 protected]'); 
     $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(); 
    } 

编辑:17年8月4日

正如per已经在php.ini文件中MAMP(更新sendmail的领域都为毫安/斌/ 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 [email protected] 

作为per已经更新了的mysite/_config/config.y毫升,包括:

Email: 
    send_all_emails_to: '[email protected]' 

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

回答

1

除了使上述建议的_ss_environment变化,在我的情况下测试电子邮件传递的真正障碍是允许安全性较低的应用与用于测试的电子邮件帐户进行通信。

我最初使用Gmail,这一点,即不允许不够安全的应用,为2级认证账户被激活。我本可以改变这个安全功能,但是选择使用次要的Yahoo电子邮件地址进行这些试验。

注意:此答案仅适用于测试此问题的性质(确保电子邮件功能正确执行);进一步的步骤将在后来的开发中作为一个安全的电子邮件应用程序。

希望这有助于其他类似的情况。

资源:

2

是 - 使用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', '[email protected]'); 
+0

忘了电子邮件环境的定义。但是,已经做了这个补充,但仍然无法将表单中的电子邮件发送到Gmail帐户。 回复出电子邮件对象的属性显示期望值已被分配,但是执行'.send()'时似乎没有发生。奇怪的是,之前的一些测试已经发送到“垃圾邮件”文件夹,但是我一直无法复制这些结果。 看着Silverstripe上下文的外部,'SMTP'和'sendmail_path ='是否需要在MAMP'php.ini'文件中配置才能使用? (在OS X中工作) –

+0

这是一个不同的问题,但还有很多其他的例子,在Stackoverflow上已经有 –

+1

问你是完全正确的;这个问题的范围应该已经澄清。是的,SO上的现有职位非常宝贵。我不确定这个问题的原因是否在我的SilverStripe或MAMP设置中(因此发布了一个额外的问题)。为了测试目的,我已经解决了这个问题 - 将在下面发布。 –

相关问题