2017-04-05 4 views
2

Je suis en train de créer un formulaire de contact qui envoie un e-mail lors de la soumission en utilisant une combinaison d'approches fournies dans la documentation SilverStripe (Introduction to frontend forms et Simple contact form). Le code (inclus ci-dessous) semble fonctionner correctement, mais je me demande s'il est possible d'envoyer des emails de test d'un serveur local (dans mon cas, MAMP) pour tester correctement la fonctionnalité.Test des formulaires de contact électronique SilverStripe à partir du serveur local

Un grand merci à l'avance

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(); 
    } 

Edit: 8/04/17

Comme per ont mis à jour les champs sendmail dans les fichiers php.ini dans MAMP (dans MAMP/bin/php/php5.6.10/conf et 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] 

Comme per ont mis à jour le monsite/_config/config.y ml d'inclure:

Email: 
    send_all_emails_to: '[email protected]' 

Tout cela en vain ...

Répondre

1

En plus de faire les _ss_environment modifications suggérées ci-dessus, la véritable barrière pour la livraison e-mail de test dans mon cas a été permettant aux applications moins sécurisées de communiquer avec le compte de messagerie utilisé pour les tests. Pour la première fois, j'utilisais Gmail, ce qui ne permet pas d'activer des applications moins sécurisées pour les comptes avec authentification en deux étapes. J'aurais pu changer cette fonctionnalité de sécurité, mais j'ai préféré utiliser une adresse e-mail secondaire Yahoo pour ces essais.

Remarque: cette réponse est uniquement destinée à être applicable à la test nature de cette question (s'assurer que la fonctionnalité e-mail s'exécute correctement); d'autres étapes seront réalisées plus tard dans le développement pour être considérées comme une application de messagerie sécurisée. Espère que cela aide les autres dans une situation similaire.

Ressources:

2

Oui - tous les e-mails envoyés à l'aide de la SilverStripe classe Email peuvent être redirigés à des fins de test:

# 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

Ensuite, ceci est utilisé pour remplacer les destinations de courrier électronique ici:

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

Reference

Donc, pour utiliser ce, définissez SS_SEND_ALL_EMAILS_TO dans la configuration de l'environnement:

# File: _ss_environment.php 
define('SS_SEND_ALL_EMAILS_TO', '[email protected]'); 
+0

oublié l'environnement de messagerie définition. Ont fait cet ajout, cependant, je suis toujours incapable d'envoyer des e-mails du formulaire à un compte Gmail. Les attributs de l'objet d'e-mail affichant des valeurs attendues ont été attribués, mais rien ne semble se produire lorsque '.send()' est exécuté. Bizarrement, certains tests antérieurs ont été envoyés dans le dossier 'spam', mais je n'ai pas réussi à reproduire ces résultats. En regardant en dehors du contexte Silverstripe, est-ce que 'SMTP' et' sendmail_path = 'doivent être configurés dans le fichier' php.ini' de MAMP pour que cela fonctionne? (travaillant sous OS X) –

+0

C'est une question différente, mais il y a beaucoup d'autres exemples de la même question posée sur Stackoverflow déjà –

+1

vous avez totalement raison; la portée de cette question aurait dû être clarifiée. Oui, les publications existantes sur le SO ont été d'une valeur inestimable. Je n'étais pas sûr si la cause de ce problème a menti dans ma configuration SilverStripe ou MAMP (affichant donc une question supplémentaire). J'ai un peu résolu ce problème à des fins de test - je l'afficherai ci-dessous. –