While analyzing what mail library to use when refactoring a code base, we discovered that the available ones are mostly legacy libraries. Some do not use namespaces and every library we encountered was merely a collection of scalar property bags than objects using encapsulation. Although we used these libs with joy in the past, they do not meet current quality standards. So, we built a new and better library according to modern programming principles.
Use this if you want to send e-mails over different transports and protocols using immutable messages and streams.
$message = (new FormattedMessageFactory())
->withHtml('<html><body><p>Hello World</p></body></html>')
->withAttachment(new FileAttachment('/order1.pdf', new ContentType('application/pdf')))
->createMessage()
->withHeader(new Subject('Hello World'))
->withHeader(From::fromEmailAddress('[email protected]'))
->withHeader(To::fromSingleRecipient('[email protected]', 'name'))
->withHeader(Cc::fromSingleRecipient('[email protected]', 'name'));
$transport = new SmtpTransport(
ClientFactory::fromString('smtp://user:pass@host/')->newClient(),
EnvelopeFactory::useExtractedHeader()
);
$transport->send($message);
$ composer require genkgo/mail
- Use SMTP or mail() to send messages
- Queue messages when transport fails
- Automatically connects and reconnects after interval to SMTP server
- Automatically generate alternative text for formatted messages
- Optimal encoded headers, so no excessive (Q/B) encoded headers
- Optimal encoded multipart messages
- Only streams and connections are mutable
- Messages and actors are immutable
- Value objects protect against invalid states
- Streams make sure the library has a low memory burden
- Many objects but still easy API
- 90%+ test coverage
- Only uses TLS < 1.2 if not otherwise possible
- Discourages SSL
- DKIM signed message
- Security is high prioritized
- Great RFC compliance
- Cast messages to valid string source
- Library has no external dependencies (but uses intl extension)
- Only PHP 7.1 and up
- Encrypted and signed messages
- English documentation, not there yet, want to help?
- PHP7.1未満お断り!最新PHPメーラーライブラリ Genkgo/Mail を試してみる - Qiita
This library tends to be as compliant with e-mail RFCs as possible. It should be compliant with the following RFCs.
- RFC 1896, The text/enriched MIME Content-type
- RFC 2822, Internet Message Format
- RFC 2045, Multipurpose Internet Mail Extensions (MIME) Part One
- RFC 2046, Multipurpose Internet Mail Extensions (MIME) Part Two
- RFC 2047, Multipurpose Internet Mail Extensions (MIME) Part Three
- RFC 2048, Multipurpose Internet Mail Extensions (MIME) Part Four
- RFC 2049, Multipurpose Internet Mail Extensions (MIME) Part Five
- RFC 2821, Simple Mail Transfer Protocol
- RCC 4954, SMTP Service Extension for Authentication
- RFC 5321, Simple Mail Transfer Protocol
This library was not able to exist without Zend/Mail and PHPMailer.