0

enter image description here I am using symfony 4.2,

In .env file:

MAILER_URL=gmail://saurabhofficial:qwerty@localhost?encryption=tls&auth_mode=oauth

swiftmailer.yaml

swiftmailer:
url: '%env(MAILER_URL)%'
spool: { type: 'memory' }

Service:

namespace App\Service;

use App\Service\WelcomeMessage;

class WelcomeMail
{
    private $welcomeMsgGenerator;
    private $mailer;

    public function __construct(WelcomeMessage $welcomeMsgGenerator, \Swift_Mailer $mailer)
    {
        $this->msg = $welcomeMsgGenerator;
        $this->mailer = $mailer;
    }

    public function createMail()
    {
        $content = $this->msg->getWelcomeMessage();

        $message = (new \Swift_Message('Saurabh!'))
            ->setFrom('saurabhofficial@gmail.com')
            ->setTo('******@gmail.com')
            ->addPart(
                'Message'.$content
            );


        return $this->mailer->send($message) > 0;
    }
}

Controller:

namespace App\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\Routing\Annotation\Route;

use App\Service\WelcomeMail;
use Symfony\Component\HttpFoundation\Response;

class ServicesController extends Controller
{
    /**
     * @Route("/services", name="services")
     */
    public function sendMailUsingServices(WelcomeMail $welcomeMail)
    {
        if($welcomeMail->createMail()){
            $show = 'Check your Mail';
        }
        else{
            die('Not working');
        }

        return $this->render('services/index.html.twig', [
            'show' => $show,
        ]);
    }
}

if($welcomeMail->createMail()){ $show = 'Check your Mail'; }
Above code gives me 'true', but mail mail is not sent/received. What am I doing wrong? Is any another way to implement it in SYMFONY 4?

Update

services.yaml

# This file is the entry point to configure your own services.
# Files in the packages/ subdirectory configure your dependencies.

# Put parameters here that don't need to change on each machine where the app is deployed
# https://symfony.com/doc/current/best_practices/configuration.html#application-related-configuration
parameters:
    locale: 'en'

services:
    # default configuration for services in *this* file
    _defaults:
        autowire: true      # Automatically injects dependencies in your services.
        autoconfigure: true # Automatically registers your services as commands, event subscribers, etc.
        public: false       # Allows optimizing the container by removing unused services; this also means
                            # fetching services directly from the container via $container->get() won't work.
                            # The best practice is to be explicit about your dependencies anyway.

    # makes classes in src/ available to be used as services
    # this creates a service per class whose id is the fully-qualified class name
    App\:
        resource: '../src/*'
        exclude: '../src/{DependencyInjection,Entity,Migrations,Tests,Kernel.php}'

    # controllers are imported separately to make sure services can be injected
    # as action arguments even if you don't extend any base controller class
    App\Controller\:
        resource: '../src/Controller'
        tags: ['controller.service_arguments']

    # add more service definitions when explicit configuration is needed
    # please note that last definitions always *replace* previous ones

config/packages/dev/swiftmailer.yaml

swiftmailer:
    # send all emails to a specific address
    #delivery_addresses: ['me@example.com']
Saurabh
  • 432
  • 1
  • 10
  • 23
  • Did you set the following `parameters` in `config/services.yaml`: `mailer_transport` and `mailer_user`? – cezar Mar 18 '19 at 10:37
  • @cezar: Thanks for replying, I was loosing hope that no one is gonna answer. lol... I have updated the question with services.yaml. Please have a look. – Saurabh Mar 18 '19 at 11:13
  • When I generate a new Symfony 4 project it defines `mailer_transport` set to `smtp` and `mailer_user` set to `test`. I thought they were present in your `services.yaml` and cause some conflict. But that's not the case. What happens if you set `mailer_transport` to `gmail` under `parameters` in `services.yaml`? I mean like this: `mailer_transport: gmail`. – cezar Mar 19 '19 at 07:20

2 Answers2

0

Try to use your full e-mail address instead of just the username (ie, saurabhofficial).

Also, please check e-mail delivery is not disabled in config/packages/dev/swiftmailer.yaml (I assume you are using dev environment).

romaricdrigon
  • 1,497
  • 12
  • 16
  • I have tried using full username. Yes, I am working on my local server. I have updated question with swiftmailer.yaml. please have a look. – Saurabh Mar 18 '19 at 11:30
  • Symfony environment is coming from `APP_ENV` variable in `.env` file, please checks that. Which web server are you using? – romaricdrigon Mar 18 '19 at 11:32
  • This is what I am using, APP_ENV = dev – Saurabh Mar 18 '19 at 11:35
  • Ok, then please check `config/packages/dev/swiftmailer.yaml` (which overrides `config/packages/swiftmailer.yaml`) – romaricdrigon Mar 18 '19 at 11:36
  • I have updated both files in the question. please have a look. – Saurabh Mar 18 '19 at 11:40
  • Thanks. At this point, I don't see anything wrong in your config or code. What is listed in the profiler, e-mail tab, when trying toi send an e-mail? – romaricdrigon Mar 18 '19 at 12:37
  • Sorry, I did not get you, actually I am new to symfony. – Saurabh Mar 18 '19 at 12:53
  • You can access the profiler by clicking on the toolbar at the bottom of any pages. You have tabs with a lot of information, including one about e-mails. Try to do that while on the page calling `createMail()`. – romaricdrigon Mar 18 '19 at 12:54
  • I have updated the question with snap shot of profiler. Please check. – Saurabh Mar 18 '19 at 13:19
  • Please click anywhere on the toolbar, to get to the detailed view. And then go to the "email" tab. From the screenshot you have indeed an error (red icon), plus an email is sent (mail icon on the right). – romaricdrigon Mar 18 '19 at 13:25
  • 1
    That's weird, I have the impression it is not using Gmail transport. Browse the profiler, especially the "Configuration" tab and the first one, look for Swiftmailer configuration and "MAILER_URL" value. Maybe the env variable is overriden somewhere on your machine? – romaricdrigon Mar 18 '19 at 13:56
  • Let us [continue this discussion in chat](https://chat.stackoverflow.com/rooms/190287/discussion-between-saurabh-and-romaricdrigon). – Saurabh Mar 19 '19 at 09:02
  • 1
    Sorry I won't go further on chat, I feel like you are asking too much here. Questions should be specific, and not about debugging all your app, you should work on a [minimal reproducible case](https://stackoverflow.com/help/mcve), or maybe further read Symfony documentation. – romaricdrigon Mar 19 '19 at 09:59
  • Thank you so much for your help. I appreciate it. – Saurabh Mar 19 '19 at 12:46
0

This is my solution .

Steps:

  • connection SMTP with google

  • define as a service

  • And to use it I call it from the controller

It works perfect on symfony 4: https://stackoverflow.com/a/55542824/2400373

juanitourquiza
  • 2,097
  • 1
  • 30
  • 52