2017-05-29 119 views
0

我試過了swiftmailer symfony here的文檔,但即使這些對我來說似乎都是正確的,我仍然無法使它工作。通過symfony 3表格發送郵件

我更改了paramaters.yml,並沒有像解釋的那樣觸摸config.yml。 看來,錯誤來自我的控制器,但在情況下,我會複製你,我一直在寫代碼/變更:

parameters.yml

parameters: 
     // 
     mailer_host: localhost 
     mailer_user: [email protected] 
     mailer_password: mypassword 

config.yml

swiftmailer: 
    transport: '%mailer_transport%' 
    host: '%mailer_host%' 
    username: '%mailer_user%' 
    password: '%mailer_password%' 
    spool: { type: memory } 

我的形式

class ContactType extends AbstractType 
{ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder 
      ->add('mail', EmailType::class, array(
       'label' => 'your mail' 
      )) 
      ->add('message', TextareaType::class, array(
       'label' => 'your message' 
      )) 
      ; 
    } 

    public function configureOptions(OptionsResolver $resolver) 
    { 
     $resolver->setDefaults(array(
      'data_class' => Contact::class, 
     )); 
    } 
} 

我控制器

class MainController extends Controller 
{ 
    public function indexAction(Request $request) 
    { 
     $contact = new Contact(); 
     $formContact = $this->createForm(ContactType::class, $contact); 
     $formContact->handleRequest($request); 
     $data = $formContact->getData(); 


     if ($formContact->isSubmitted() && $formContact->isValid()) { 
      $em = $this->getDoctrine()->getManager(); 

      $em->persist($contact); 
      $em->flush(); 

      $message = \Swift_Message::newInstance(); 
      $message->setFrom($data->getMail()) 
       ->setTo('[email protected]') 
       ->setBody($data->getMessage() . $data->getMail()); 

      $this->get('mailer')->send($message); 
     } 

     return $this->render('app/main/index.html.twig', array(
      'form' => $formContact->createView() 
     )); 
    } 
} 

的這裏是錯誤,當我運行此代碼 enter image description here

我不知道這是否可以幫助或者如果你需要更多的信息,但會很高興分享,謝謝。

+1

似乎錯誤解釋得很好。你試圖訪問你的'Contact'類對象thingy上的一個名爲mail的屬性。但由於它是私人的,你只能從該類(實體)中訪問它。如果它們是生成的('$ data-> getMail()')或者在實體中公開,則使用/創建getter/setter(建議)' - > getData()'返回您在createForm –

+0

感謝回覆@JenneVanDerMeer我更新了我的問題並添加了您的建議。我現在沒有任何錯誤,但我沒有收到任何電子郵件,我的代碼中是否有其他錯誤? (郵件和密碼好) –

+0

@JennevanderMeer謝謝你的幫助,我成功地收到了一封郵件:) –

回答

2

只是爲了闡明Jenne的觀點:您需要使用getter方法來訪問私有變量。

但是,您在配置中也使用了spool,因此您需要在排隊消息後實際訪問並啓動假脫機。 (見:here)。如果您不想後臺打印,請從配置中刪除該行,並且應直接從代碼中發送電子郵件(如tutorial中所示)。

+1

嗨@Darkstarone我成功地發送了一封電子郵件!儘管我不得不'黑客'才能看到發件人的電子郵件。我無法做到這一點,對此如何工作有任何想法? (檢查更新後的控制器在' - > setBody($ data-> getMessage()。$ data-> getMail());') –

+0

嗯,你的意思是你看不到發件人在你的電子郵件客戶端?這可能是一個客戶端問題 - 我擔心我實際上對'swiftmailer'沒有多少經驗,所以我不知道! – Darkstarone

+0

由於您是從Gmail帳戶發送的,您可能需要查看[this](https://symfony.com/doc/3.4/email/gmail.html)和[this](https:// stackoverflow。 com/questions/14128472 /如何設置使用swiftmailer-with-gmail) - Gmail阻止了一些swiftmailer選項。 – Darkstarone