Контактная форма Symfony отправлена, но письма не приходят - PullRequest
0 голосов
/ 03 апреля 2019

Мне нужна помощь по отправке электронных писем в Symfony 4.

Я создал контактную форму в Symfony 4., где я использую formbuilder и swiftmailer.Форма обратной связи работает, она проверяется и я могу отправить.но письма не приходят плюс я не получаю подтверждающее сообщение на самой странице контакта после отправки.я использую почтовик с хостом самого сайта.Сайт находится в производственном режиме.

См. Ниже код, который я использовал.Может быть, я пропустил некоторые настройки?спасибо заранее!

ContactType.php

<?php
// your-path-to-types/ContactType.php

namespace App\Form;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
use Symfony\Component\Form\Extension\Core\Type\EmailType;

class ContactType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('name',TextType::class);
        $builder->add('email',EmailType::class);
        $builder->add('subject',TextType::class);
        $builder->add('body',TextareaType::class);
    }

    public function getBlockPrefix()
    {
        return 'contact';
    }
}

Contact.php моя сущность

<?php

// src/Entity/Contact.php


namespace App\Entity;

use Symfony\Component\Validator\Mapping\ClassMetadata;
use Symfony\Component\Validator\Constraints\NotBlank;
use Symfony\Component\Validator\Constraints\Email;
use Symfony\Component\Validator\Constraints\Length;
use Doctrine\Common\Collections\ArrayCollection;  

class Contact

{

    protected $name;
    protected $email;
    protected $subject;
    protected $body;
    public function getName()

    {
        return $this->name;
    }



    public function setName($name)

    {
        $this->name = $name;
    }



    public function getEmail()

    {
        return $this->email;
    }



    public function setEmail($email)

    {
        $this->email = $email;
    }



    public function getSubject()

    {
        return $this->subject;
    }



    public function setSubject($subject)

    {
        $this->subject = $subject;
    }



    public function getBody()

    {
        return $this->body;
    }



    public function setBody($body)

    {
        $this->body = $body;

    }

    public static function loadValidatorMetadata(ClassMetadata $metadata)
    {
        $metadata->addPropertyConstraint('name', new NotBlank());

        $metadata->addPropertyConstraint('email', new Email());

        $metadata->addPropertyConstraint('subject', new NotBlank());
        $metadata->addPropertyConstraint('subject', new Length(array('max'=> 50)));

        $metadata->addPropertyConstraint('body', new Length(array('min'=> 5)));
    }

}

и мой контроллер

<?php
namespace App\Controller;

use App\Entity\Contact;
use App\Form\ContactType;

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Request;


final class PagesController extends DefaultController

{


    /**
     * @Route("/contact", name="contact")
     * @Method("GET|POST")
     */
    public function contact(Request $request,  \Swift_Mailer $mailer)
    {

        $enquiry = new Contact();
        $form = $this->createForm(ContactType::class, $enquiry);

         $this->request = $request;
            if ($request->getMethod() == 'POST') {
            $form->handleRequest($request);

            if ($form->isValid()) {


                        $message = (new \Swift_Message('Hello Email'))
                            ->setFrom('contact@example.com')
                            ->setTo('xxxxxxx@gmail.com')
                            ->setBody($this->renderView('contact/contactEmail.txt.twig', array('enquiry' => $enquiry)));
                        $mailer->send($message);

                    $this->get('session')->getFlashbag('blog-notice', 'Your contact enquiry was successfully sent. Thank you!');


                // Redirect - This is important to prevent users re-posting
                // the form if they refresh the page
                return $this->redirect($this->generateUrl('contact'));

            }
        }

        return $this->render('pages/contact.html.twig', array(
            'form' => $form->createView(),
        ));
    }


}

и вмой main.env файл У меня есть этот

MAILER_URL=smtp://localhost:25?encryption=ssl&auth_mode=login&username=xxx&password=xxxx

Так что электронная почта не доставляется.После отправки я возвращаюсь обратно на страницу контактов, и никаких флеш-сообщений тоже: / Я что-то пропустил, чтобы это сработало?

пример:

  • должно ли мое имя пользователя быть целым адресом электронной почты, который мне также нужно декодировать и т. Д.?
  • мне нужно также что-то изменить на сервере?пожалуйста, сообщите.

Ответы [ 3 ]

0 голосов
/ 04 апреля 2019

Это еще один вопрос, связанный с настройкой электронной почты.При переходе к настройке Gmail у меня есть мой адрес Gmail в качестве отправителя.Но я хочу использовать адрес веб-сайта в качестве отправителя (например, без ответа @)

Как это работает?как мне это настроить?

0 голосов
/ 05 апреля 2019

Хорошо, я могу ответить на свой оригинальный вопрос.

Я получил SMTP для работы:

в swiftmailer.yaml он поставил следующее, и я отключил почтовую программу в yaml.

swiftmailer:
    transport:        smtp
    username:         null
    password:         null
    host:             localhost
    port:             465
    encryption:       ssl
    auth-mode:        login
    spool: { type: 'memory' }
    stream_options:
        ssl:
            allow_self_signed: true
            verify_peer: false
            verify_peer_name: false

Письма приходят в мой почтовый ящик, где отправителем является xxx@website.com

0 голосов
/ 04 апреля 2019

Хорошо, сейчас я настроил учетную запись gmail.и да, он отправил письмо сейчас:)

Так что мой код был в порядке, я думаю.просто настройки сервера не очень хорошие, но теперь работают с gmail :) Спасибо всем за помощь:)

...