Skip to content

[Cookbook] New cookbok: How to use the Cloud to send Emails #3234

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 3 commits into from
Closed
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
110 changes: 110 additions & 0 deletions cookbook/email/cloud.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
.. index::
single: Emails; Cloud
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cloud -> Using the cloud ?


How to use the Cloud to send Emails
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe I'm wrong but shouldn't this be "How to Use the Cloud to Send E-Mails" according to our new guidelines?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

At least I prefer E-Mail over Email

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've used the Gmail cookbook as a base for this one.
So if we change it we may should change it in the whole docs, otherwise it would for example read like

  • How to use Gmail to send Emails
  • How to use the Cloud to Send E-Mails
    in the TOC.

Btw, I've found a lot of such words that are spelled differently across the docs; I'll create an issue listing them, we could vote for the correct one and then I'll update the docs.

===================================

Requirements for sending emails from a production system differ from your
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

e-mails

development setup as you don't want to be limited in the number of emails,
the sending rate or the sender address. Thus,
:doc:`using Gmail </cookbook/email/gmail>`_ or similar services is not an
option. If setting up and maintaining your own reliable mail server causes
you a headache there's a simple solution: Leverage the cloud to send your
emails.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

same here


The following example shows how easy it is to integrate
`Amazon's Simple Email Services (SES)`_ into Symfony. But no matter what
service you're actually using, there's nothing more to it than configuring an
SMTP endpoint for Swift Mailer.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this should b placed in a.note

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do you mean the The following example shows... paragraph only?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Doesn't that look a bit strange, because actually all that follows builds upon the introduction of SES (in the note then)?

I think maybe the sentence But no matter what .. should be placed in a note because it is an independent notice.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

hmm, yes indeed. Something like:

This article shows how easy it is to integrate `Amazon's Simple Email Services (SES)`_
into the Symfony Framework.

.. note::

    You can use the same technique for other mail services, as most of the time there is
    nothing more to it than configuring an SMTP endpoint for Swift Mailer.


In the Symfony configuration, change the Swift Mailer settings ``transport``,
``host``, ``port`` and ``encryption`` according to the information provided in
the `SES console`_. Create your individual SMTP credentials in the SES console
and complete the configuration with the provided ``username`` and ``password``:

.. configuration-block::

.. code-block:: yaml

# app/config/config.yml
swiftmailer:
transport: smtp
host: email-smtp.us-east-1.amazonaws.com
port: 465 # different ports are available, see SES console
encryption: tls # TLS encryption is required
username: AWS_ACCESS_KEY # to be created in the SES console
password: AWS_SECRET_KEY # to be created in the SES console

.. code-block:: xml

<!-- app/config/config.xml -->

<!--
xmlns:swiftmailer="http://symfony.com/schema/dic/swiftmailer"
http://symfony.com/schema/dic/swiftmailer http://symfony.com/schema/dic/swiftmailer/swiftmailer-1.0.xsd
-->

<swiftmailer:config
transport="smtp"
host="email-smtp.us-east-1.amazonaws.com"
port="465"
encryption="tls"
username="AWS_ACCESS_KEY"
password="AWS_SECRET_KEY" />
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

is there any reason to not provide a complete and valid XML configuration?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This also comes from the Gmail cookbook, so I should update both then.


.. code-block:: php

// app/config/config.php
$container->loadFromExtension('swiftmailer', array(
'transport' => "smtp",
'host' => "email-smtp.us-east-1.amazonaws.com",
'port' => 465,
'encryption' => "tls",
'username' => "AWS_ACCESS_KEY",
'password' => "AWS_SECRET_KEY",
));
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

$container->loadFromExtension('swiftmailer', array(
    'transport'  => 'smtp',
    'host'       => 'email-smtp.us-east-1.amazonaws.com',
    'port'       => 465,
    'encryption' => 'tls',
    'username'   => 'AWS_ACCESS_KEY',
    'password'   => 'AWS_SECRET_KEY',
));


The ``port`` and ``encryption`` keys are not present in the Symfony Standard
Edition configuration by default, but you can simply add them as needed.

And that's it, you're ready to start sending emails through the cloud!
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

e-mails


.. tip::

If you are using the Symfony Standard Edition, configure the parameters at
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

in parameters.yml

``parameters.yml`` and use them in your configuration files. This allows
for different Swift Mailer configurations for each installation of your
application. For instance, use Gmail during development and the cloud in
production.

.. code-block:: yaml

# app/config/parameters.yml
parameters:
# ...
mailer_transport: smtp
mailer_host: email-smtp.us-east-1.amazonaws.com
mailer_port: 465 # different ports are available, see SES console
mailer_encryption: tls # TLS encryption is required
mailer_user: AWS_ACCESS_KEY # to be created in the SES console
mailer_password: AWS_SECRET_KEY # to be created in the SES console

.. note::

If you intend to use Amazon SES, please note the following:

* You have to sign up to `Amazon Web Services (AWS)`_;

* Every sender address used in the ``From`` or ``ReturnPath`` (bounce
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Return-Path instead of ReturnPath?

address) header needs to be confirmed by the owner. You can also
confirm an entire domain;

* Initially you are in a restricted sandbox mode. You need to request
production access before being allowed to send to arbitrary
recipients;

* SES may be subject to a charge.

.. _`Amazon's Simple Email Services (SES)`: http://aws.amazon.com/ses
.. _`SES console`: https://console.aws.amazon.com/ses
.. _`Amazon Web Services (AWS)`: http://aws.amazon.com
1 change: 1 addition & 0 deletions cookbook/map.rst.inc
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@

* :doc:`/cookbook/email/email`
* :doc:`/cookbook/email/gmail`
* :doc:`/cookbook/email/cloud`
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should also be added to /cookbook/email/index.rst

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done, thanks!

* :doc:`/cookbook/email/dev_environment`
* :doc:`/cookbook/email/spool`
* :doc:`/cookbook/email/testing`
Expand Down