How to Send Email Using PHP

Send Emails with PHP
Alex Kachalov Alex Kachalov 15 june 2021, 13:41 0

Introduction

Let's say you are writing a web service that needs to send an email with PHP language. Sending an email is not an easy process. In order to do everything right, you need to follow many standards such as SMTP, MIME, Base64, SPF, DKIM, and others. Fortunately, over the time of email and the PHP programming language’s existence, many libraries have been written to facilitate this process. There are also Internet services that help to solve any emerging problems and make the process even easier.

However, the variety of solutions makes it challenging to choose the right service. Besides, in order to send emails correctly, you will have to solve the related issues of the domain setup and tracking statistics. We've prepared a series of articles to help you figure it all out. The series consists of the following topics:

  • Transport
  • PHP code
  • Composing a complex letter
  • How to avoid spam
  • Statistics
  • Bulk sending

Transport

First, let’s speak about the transport layer since it affects how to send an email via PHP code. Emails are sent using SMTP, and there are a variety of methods to do it:

  • directly to the recipient's SMTP
  • via your ISP's SMTP server
  • via public SMTP server (e.g., Gmail, Hotmail, mail.ru)
  • by configuring your SMTP server
  • via a commercial SMTP service (SendGrid, Mailgun, UniOne)

Directly to the recipient's SMTP server

Spoiler alert: This is the worst way you can choose. It is technically possible to connect directly to the recipient's SMTP server, but this is usually not the case. It is much more convenient and efficient to send through an intermediate, your SMTP server called SMTP-relay. First, you pass the email to be sent to it, and it is engaged in sending it to the recipient. Why is it worth doing this?

  • You don’t have to implement complex retry logic for yourself since the recipient's server may be unavailable or temporarily overloaded; it may deliberately refuse the connection on the first attempt to reduce the amount of spam (so-called greylisting).
  • You don’t need to do additional work on receiving and processing the A/MX records of the addressee to find out where to send the email.
  • Your ISP may close outgoing connections to SMTP port 25 to reduce spam.
  • SMTP-relay is designed to handle large volumes of incoming and outgoing mail and will most likely do it more efficiently than a homebrew solution.

If you are not an ESP service developer and not a spammer, then we advise you to forget about this method.

Your ISP's SMTP server

In the vast majority of cases, PHP is used on commercial web hosting. It means that the hosting provider already has a configured SMTP server. Sending email via this server is possible either using the Unix Sendmail program running on the hosting or directly via the SMTP protocol through the connection data provided by ISP. Unlike the previous method, this one is quite convenient. However, it has some disadvantages:

  • The provider can limit the number of messages to be sent through it.
  • If your SMTP server gets blacklisted due to the hosting neighbors, your mail may end up in spam.
  • You need to set up SPF, DKIM, DMARC.
  • You also have to track the statistics of reading/clicks.

Public SMTP Server

If you have a personal or corporate account on any public mail service like Gmail or mail.ru, you can send mail from your program via this service.

In this case, you get some benefits:

  • The email deliverability rate will be higher because recipients have more trust in the SMTP servers of familiar services.
  • Setting SPF, DKIM, DMARC is already done correctly.

There are still some drawbacks:

  • The number of emails sent per hour/day is limited.
  • You are in charge of reading/clicks statistics.

Your Own SMTP server

This is a good way. However, it is only suitable for those who have their own system administrator in the staff. Unfortunately, installing and configuring an SMTP server is not enough. You also have to monitor that the IP address or domain does not get blacklisted. You have to communicate with the domain owners so that your server is removed from the blacklist. You also have to make sure that the server works stably and is not overloaded. You also need to update it in time to avoid recurring vulnerabilities.

Commercial SMTP service

There are many services that are responsible for solving most of the problems that arise when sending an email. Among them are SendGrid, Mailgun, UniOne, etc. Using one of these services has a lot of advantages:

  • You save time on setting up and maintaining the SMTP server.
  • You get maximum delivery speed.
  • Usually, the services include both viewing general statistics and tracking the results of delivery/reading/clicking on the link of individual emails.
  • Optional unsubscribe option.
  • In case of technical problems, you will be notified about them, and the support will help you solve them.
  • Deliverability is better than the provider's own SMTP server or the provider's general SMTP server.

In fact, there is only one drawback you have to pay for such a service. Fortunately, due to the competition, the pricing is affordable. Most of the services have either a free package or an extended trial period to understand if the service suits you.