📧 Handy email creation and transfer library for PHP with both text and MIME-compliant support.

Overview

Nette Mail: Sending E-mails

Downloads this Month Tests Coverage Status Latest Stable Version License

Introduction

Are you going to send emails such as newsletters or order confirmations? Nette Framework provides the necessary tools with a very nice API.

Documentation can be found on the website.

Support Me

Do you like Nette Mail? Are you looking forward to the new features?

Buy me a coffee

Thank you!

Installation

composer require nette/mail

It requires PHP version 8.0 and supports PHP up to 8.1.

Creating Emails

Email is a Nette\Mail\Message object:

$mail = new Nette\Mail\Message;
$mail->setFrom('John 
   
    '
   )
	->addTo('[email protected]')
	->addTo('[email protected]')
	->setSubject('Order Confirmation')
	->setBody("Hello, Your order has been accepted.");

All parameters must be encoded in UTF-8.

In addition to specifying recipients with the addTo() method, you can also specify the recipient of copy with addCc(), or the recipient of blind copy with addBcc(). All these methods, including setFrom(), accepts addressee in three ways:

$mail->setFrom('[email protected]');
$mail->setFrom('[email protected]', 'John Doe');
$mail->setFrom('John Doe 
   
    '
   );

The body of an email written in HTML is passed using the setHtmlBody() method:

$mail->setHtmlBody('

Hello,

Your order has been accepted.

'
);

You don't have to create a text alternative, Nette will generate it automatically for you. And if the email does not have a subject set, it will be taken from the </code> element.</p> <p dir="auto">Images can also be extremely easily inserted into the HTML body of an email. Just pass the path where the images are physically located as the second parameter, and Nette will automatically include them in the email:</p> <div class="highlight highlight-text-html-php position-relative overflow-auto" data-snippet-clipboard-copy-content="// automatically adds /path/to/images/background.gif to the email $mail->setHtmlBody( '<b>Hello</b> <img src="background.gif">', '/path/to/images' );"> <pre><span class="pl-c">// automatically adds /path/to/images/background.gif to the email</span> <span class="pl-s1"><span class="pl-c1">$</span>mail</span>-><span class="pl-en">setHtmlBody</span>( <span class="pl-s">'<b>Hello</b> <img src="background.gif">'</span>, <span class="pl-s">'/path/to/images'</span> );</pre> </div> <p dir="auto">The image embedding algorithm supports the following patterns: <code><img src=...></code>, <code><body background=...></code>, <code>url(...)</code> inside the HTML attribute <code>style</code> and special syntax <code>[[...]]</code>.</p> <p dir="auto">Can sending emails be even easier?</p> <p dir="auto">Emails are like postcards. Never send passwords or other credentials via email.</p> <h2 dir="auto"><a id="user-content-attachments" class="anchor" aria-hidden="true" href="#attachments"> <svg class="octicon octicon-link" viewbox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"> <path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path> </svg></a>Attachments</h2> <p dir="auto">You can, of course, attach attachments to email. Use the <code>addAttachment(string $file, string $content = null, string $contentType = null)</code>.</p> <div class="highlight highlight-text-html-php position-relative overflow-auto" data-snippet-clipboard-copy-content="// inserts the file /path/to/example.zip into the email under the name example.zip $mail->addAttachment('/path/to/example.zip'); // inserts the file /path/to/example.zip into the email under the name info.zip $mail->addAttachment('info.zip', file_get_contents('/path/to/example.zip')); // attaches new example.txt file contents "Hello John!" $mail->addAttachment('example.txt', 'Hello John!');"> <pre><span class="pl-c">// inserts the file /path/to/example.zip into the email under the name example.zip</span> <span class="pl-s1"><span class="pl-c1">$</span>mail</span>-><span class="pl-en">addAttachment</span>(<span class="pl-s">'/path/to/example.zip'</span>); <span class="pl-c">// inserts the file /path/to/example.zip into the email under the name info.zip</span> <span class="pl-s1"><span class="pl-c1">$</span>mail</span>-><span class="pl-en">addAttachment</span>(<span class="pl-s">'info.zip'</span>, <span class="pl-en">file_get_contents</span>(<span class="pl-s">'/path/to/example.zip'</span>)); <span class="pl-c">// attaches new example.txt file contents "Hello John!"</span> <span class="pl-s1"><span class="pl-c1">$</span>mail</span>-><span class="pl-en">addAttachment</span>(<span class="pl-s">'example.txt'</span>, <span class="pl-s">'Hello John!'</span>);</pre> </div> <h2 dir="auto"><a id="user-content-templates" class="anchor" aria-hidden="true" href="#templates"> <svg class="octicon octicon-link" viewbox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"> <path fill-rule="evenodd" d="M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"></path> </svg></a>Templates</h2> <p dir="auto">If you send HTML emails, it's a great idea to write them in the <a href="https://latte.nette.org" rel="nofollow">Latte</a> template system. How to do it?</p> <div class="highlight highlight-text-html-php position-relative overflow-auto" data-snippet-clipboard-copy-content="$latte = new Latte\Engine; $params = [ 'orderId' => 123, ]; $mail = new Nette\Mail\Message; $mail->setFrom('John <john@example.com>') ->addTo('jack@example.com') ->setHtmlBody( $latte->renderToString('email.latte', $params), '/path/to/images' );"> <pre><span class="pl-s1"><span class="pl-c1">$</span>latte</span> = <span class="pl-k">new</span> <span class="pl-v">Latte</span>\<span class="pl-v">Engine</span>; <span class="pl-s1"><span class="pl-c1">$</span>params</span> = [ <span class="pl-s">'orderId'</span> => <span class="pl-c1">123</span>, ]; <span class="pl-s1"><span class="pl-c1">$</span>mail</span> = <span class="pl-k">new</span> <span class="pl-v">Nette</span>\<span class="pl-v">Mail</span>\<span class="pl-v">Message</span>; <span class="pl-s1"><span class="pl-c1">$</span>mail</span>-><span class="pl-en">setFrom</span>(<span class="pl-s">'John <john@example.com>'</span>) -><span class="pl-en">addTo</span>(<span class="pl-s">'jack@example.com'</span>) -><span class="pl-en">setHtmlBody</span>( <span class="pl-s1"><span class="pl-c1">$</span>latte</span>-><span class="pl-en">renderToString</span>(<span class="pl-s">'email.latte'</span>, <span class="pl-s1"><span class="pl-c1">$</span>params</span>), <span class="pl-s">'/path/to/images'</span> );</pre> </div> <p dir="auto">File <code>email.latte</code>:</p> <div class="highlight highlight-text-html-basic position-relative overflow-auto" data-snippet-clipboard-copy-content="<html> <head> <meta charset="utf-8"> <title>Order Confirmation

Hello,

Your order number {$orderId} has been accepted.

">
<html>
<head>
	<meta charset="utf-8">
	<title>Order Confirmationtitle>
	<style>
	body {
		background: url("background.png")
	}
	style>
head>
<body>
	<p>Hello,p>

	<p>Your order number {$orderId} has been accepted.p>
body> html>

Nette automatically inserts all images, sets the subject according to the </code> element, and generates text alternative for HTML body.</p>

Sending Emails

Mailer is class responsible for sending emails. It implements the Nette\Mail\Mailer interface and several ready-made mailers are available which we will introduce.

SendmailMailer

The default mailer is SendmailMailer which uses PHP function mail(). Example of use:

$mailer = new Nette\Mail\SendmailMailer;
$mailer->send($mail);

If you want to set returnPath and the server still overwrites it, use $mailer->commandArgs = '[email protected]'.

SmtpMailer

To send mail via the SMTP server, use SmtpMailer.

$mailer = new Nette\Mail\SmtpMailer([
	'host' => 'smtp.gmail.com',
	'username' => '[email protected]',
	'password' => '*****',
	'secure' => 'ssl',
]);
$mailer->send($mail);

If you do not specify host, the value from php.ini will be used. The following additional keys can be used in the options:

  • port - if not set, the default 25 or 465 for ssl will be used
  • context - allows you to set SSL context options for connection
  • timeout - timeout for SMTP connection
  • persistent - use persistent connection
  • clientHost - client designation

FallbackMailer

It does not send email but sends them through a set of mailers. If one mailer fails, it repeats the attempt at the next one. If the last one fails, it starts again from the first one.

$mailer = new Nette\Mail\FallbackMailer([
	$smtpMailer,
	$backupSmtpMailer,
	$sendmailMailer
]);
$mailer->send($mail);

Other parameters in the constructor include the number of repeat and waiting time in miliseconds.

DKIM

DKIM (DomainKeys Identified Mail) is a trustworthy email technology that also helps detect spoofed messages. The sent message is signed with the private key of the sender's domain and this signature is stored in the email header. The recipient's server compares this signature with the public key stored in the domain's DNS records. By matching the signature, it is shown that the email actually originated from the sender's domain and that the message was not modified during the transmission of the message.

$options = [
	'domain' => 'nette.org',
	'selector' => 'dkim',
	'privateKey' => file_get_contents('../dkim/dkim.key'),
	'passPhrase' => '****',
];

$mailer = new Nette\Mail\SendmailMailer; // or SmtpMailer
$mailer->setSigner(new Nette\Mail\DkimSigner($options));
$mailer->send($mail);
Comments
  • Allow set stream context

    Allow set stream context

    In current implementation, there is no way to modify stream context parameters.

    Which means there is no way to connect (since php 5.6) to SSL/TLS server with self-signed, expired, missmatched CN, etc..

    See this problem on forum, for example.

    If this is acceptable I would like to discuss possible approaches:

    • allow set full stream context
    • allow set only some values (verify_peer, verify_peer_name, etc...)

    Also there is problem how to catch warnings from underlying Openssl library and provide it to SmtpException as error message.

    There is MR, more like experiment, implementation is vague.

    We can find inspiration for example in Ruby.

    opened by ZZromanZZ 15
  • SMTP server did not accept STARTTLS with error: 503 5.5.2 Send hello first

    SMTP server did not accept STARTTLS with error: 503 5.5.2 Send hello first

    Version: 3.1.3

    Bug Description

    After upgrading nette/mail to version 3.1.3 from 3.1.2, the e-mails won't send with exception:

    Nette\Mail\SmtpException
    SMTP server did not accept STARTTLS with error: 503 5.5.2 Send hello first [DB5EUR03FT018.eop-EUR03.prod.protection.outlook.com]
    

    I suspect this pull request https://github.com/nette/mail/pull/67 to be an issue.

    Steps To Reproduce

    Send e-mail with this settings:

    [
      'host' => '<hidden>.mail.protection.outlook.com',
      'port' => 25,
      'secure' => 'tls',
    ]
    

    Expected Behavior

    E-mail is sent

    Possible Solution

    Revert the pull request https://github.com/nette/mail/pull/67

    opened by hubipe 12
  • UTF8 in attachment filename is not encoded

    UTF8 in attachment filename is not encoded

    Version: 3.1.4

    Bug Description

    If the attachment file name contains UTF8 characters, the header is not RFC 2047 encoded, which causes email to rely on support of SMTPUTF8 extension, making the email undeliverable to destinations servers that don't support it (gmail supports it, but e.g. email.cz does not).

    Steps To Reproduce

    $mail = new Nette\Mail\Message;
    $mail->setFrom('John <[email protected]>')
            ->addTo('[email protected]')
            ->setSubject('Kůň v příloze')
            ->setBody("Test")
            ->addAttachment("kůň.txt", "test");
    
    die($mail->generateMessage());
    

    See resulting Content-Disposition header:

    Content-Disposition: attachment; filename="kůň.txt"
    

    Expected Behavior

    Content-Disposition: attachment; filename="=?UTF-8?B?a8WvxYgudHh0?="
    

    Possible Solution

    This worked in the previous version, the bug was introduced with this change https://github.com/nette/mail/commit/6f333738075ba9ee152795dcbbd84569127a3182 which fixed #24, in this change, call to encodeHeader() has been removed. This call should be probably returned, but I'm not sure how exactly in order to not introduce back the issue #24.

    I know a workaround is not to use utf8 in attachment file name with e.g. Strings::toAscii($filename), but as long as the encoding works well with other headers like Subject or From, I don't see a reason for this header to be an exception.

    opened by tumapav 11
  • Message: hostname can be set in constructor, using only $_SERVER['HTT…

    Message: hostname can be set in constructor, using only $_SERVER['HTT…

    …P_HOST'] is insufficient

    Gmail pays particularly close attention to Message ID and Received headers. Message IDs that are formed incorrectly (without brackets <> and with wrong domain after @) can make Gmail think you are a spammer.

    opened by ondrs 9
  • Propagate links target from HTML message to plaintext version

    Propagate links target from HTML message to plaintext version

    Link in HTML mail may be important (like a links to verification, unsubscribe or other marketing behavior). Is important do not loss this information on all variants of e-mail message.

    This PR add textual citation of link target.

    opened by jakubboucek 9
  • Remove @ error suppression when connecting.

    Remove @ error suppression when connecting.

    • bug fix? yes
    • new feature? no
    • BC break? no

    With error suppression, i.e. @stream_socket_client(), will have $errno set to 0 and $error being an empty string ''. This is an undocumented behaviour but leads to inconveniences during debug and development.

    According to the document and my tests with PHP 7.0, 7.1 and 7.2 this function does not throw.

    Removing the @ sign will have the function populates the actual $errno and $error which I believe is in fact the expected result.

    opened by vicary 7
  • Throw fatal error

    Throw fatal error

    • bug report? yes
    • feature request? no
    • version: 2.4.2

    No work. i am attempting to send a mail but it give me this: Fatal error: Uncaught Error: Class 'Nette\Mail\Message' not found in C:\xampp\htdocs\Pasantias pdf\Registro\componentes\correo.php:4 Stack trace: #0 {main} thrown in C:\xampp\htdocs\Pasantias pdf\Registro\componentes\correo.php on line 4

    my code is the following: use Nette\Mail\Message;

    $mail = new Message; $mail->setFrom('Jorge ********@gmail.com') ->addTo('***@gmail.com') ->setSubject('Order Confirmation') ->setBody("Hello, Your order has been accepted."); $mailer = new Nette\Mail\SmtpMailer([ 'host' => 'smtp.gmail.com', 'username' => '*****@gmail.com', 'password' => '***', 'secure' => 'ssl', 'context' => [ 'ssl' => [ 'capath' => '/path/to/my/trusted/ca/folder', ], ], ]); $mailer->send($mail);

    opened by gorge2004 7
  • Exception is raised when html body contains url with 'src' link

    Exception is raised when html body contains url with 'src' link

    Creating email message with html body, which contains query string with "src" name in some url, throws FileNotFoundException.

    $message = new Nette\Mail\Message();
    $message->setHtmlBody("<a href='test.php?src=SOME'>some link</a>");
    

    throws FileNotFoundException with message "Unable to read file /SOME"

    Because it completely crashes sending particular email, it's serious bug.

    Maybe there are another use cases with src string in html, which can also hit this bug.

    opened by iinfo-dev-mk 6
  • SmtpMailer: improved exception message on write failure

    SmtpMailer: improved exception message on write failure

    Previous behaviour was insufficient, you just got name of command which failed. There was no information why. Now you should see the response of SMTP server. For example:

    SMTP server did not accept RCPT TO:<[email protected]> with error: 550 5.1.1 User unknown; rejecting
    
    opened by janedbal 6
  • Message: Subject should never contain  

    Message: Subject should never contain  

    • new feature?
    • BC break? yes

    An email can be created from a template where a fixed space can wander in. This modification removes the fixed spaces from subject.

    opened by janbarasek 4
  • mail twice

    mail twice

    • bug report? yes/no
    • feature request? yes/no
    • version: ?.?.?

    Description

    after required this composer, every time i send email to me, i will receive email twice! why?

    Steps To Reproduce

    ... If possible a minimal demo of the problem ...

    opened by theone-daxia 4
  • imgName(1).jpg on embedded

    imgName(1).jpg on embedded

    Bug Description

    bad match if image name have ( ) example: <img src="test/test(1).jpg"> some wron on https://github.com/nette/mail/blob/master/src/Mail/Message.php#L197

    opened by qwerin 0
  • Backtrack limit was exhausted with base64 encoded image

    Backtrack limit was exhausted with base64 encoded image

    Version: 3.1.5

    Bug Description

    Whenever there is a bigger base64 encoded image in E-mail we get this exception: image

    Steps To Reproduce

    It's clear from bug description

    Additional

    I'm not sure how to even solve this, avoiding Regex if possible would maybe be best since we never know how big e-mail can be and with base64 encoded images this can become huge quickly... I know I can set bigger limit, but then again how much memory will it use and when will we hit it again... Probably only proper solution here would be to add image as attachment and not base64 encoded... I've managed to avoid issue in this particular mail since we're not using any images so I just set basePath as null so it doesn't go into this part of code, but obviously that's not a solution...

    opened by dakorpar 2
  • Extension: FalbackMailer

    Extension: FalbackMailer

    • [ ] bug report?
    • [x] feature request?
    • [x] version: 2.4 - 3.0

    I create a extension for configure FallbackMailer in neon, I think, than it would be in this.

    Maybe add option whitch turn on/off fallbackMailer, fallback: true/false - false by default.

    opened by JanGalek 5
  • FallbackMailer: shuffle mailers with given probability

    FallbackMailer: shuffle mailers with given probability

    • bug fix? no
    • new feature? yes
    • BC break? no
    • doc PR: would be nice to have

    Intended to periodically test the other mailers. I'm not sure whether default $shuffleProbability should be 0.0 or sth like 0.001 (would be a minor BC break).

    opened by JanTvrdik 11
Releases(v3.1.9)
  • v3.1.9(Nov 18, 2022)

  • v3.0.0(Feb 20, 2019)

  • v3.1.8(Nov 24, 2021)

  • v3.1.7(Jun 2, 2021)

  • v3.1.6(Feb 24, 2021)

  • v3.1.5(Nov 2, 2020)

    • compatible with PHP 8.0
    • MimePart::encodeSequence uses mime_encode for long strings
    • MimePart: UTF8 in attachment filename is encoded #75
    • MimePart: encodeHeader() -> encodeSequence()
    • Message::createAttachment() when content is provided, file name is not changed
    • Message::createAttachment() escapes " in filename
    • SmtpMailer: allowed login with blank password #74

    For the details you can have a look at the diff.

    Source code(tar.gz)
    Source code(zip)
  • v3.1.4(Aug 3, 2020)

    • SmtpMailer: Fix for servers which sends 250-AUTH only through encrypted connections (#67)
    • DkimSigner: removed testmode, added getTime()
    • Revert "SmtpMailer: Fix for servers which sends 250-AUTH only through encrypted connections (#67)" #71
    • Revert "MimePart: line length limit changed to 500" #72

    For the details you can have a look at the diff.

    Source code(tar.gz)
    Source code(zip)
  • v3.1.3(Jul 13, 2020)

    • SmtpMailer: Fix for servers which sends 250-AUTH only through encrypted connections (#67)
    • use FileSystem::read() instead of native file_get_contents() (#69)
    • Message: Optional parameter before required (#68)

    For the details you can have a look at the diff.

    Source code(tar.gz)
    Source code(zip)
  • v3.1.2(Mar 25, 2020)

    • MimePart: fixed folding of header with file name #24
    • MimePart: line length limit changed to 500
    • MailExtension: privateKey is not dynamic

    For the details you can have a look at the diff.

    Source code(tar.gz)
    Source code(zip)
  • v3.1.1(Mar 10, 2020)

  • v3.1.0(Jun 3, 2019)

    • added DKIM feature (#51)
    • renamed Nette\Mail\IMailer -> Mailer

    DKIM can be configured via config file:

    mail:
    	dkim:
    		domain: ...
    		selector: ...
    		privateKey: private.key.file
    		passPhrase: ...
    		testMode: ...
    
    Source code(tar.gz)
    Source code(zip)
  • v3.0.1(Jun 3, 2019)

    • added .phpstorm.meta.php
    • Message: added support for quoted "display-name" <email> #64
    • MailExtension: added getConfigSchema()

    For the details you can have a look at the diff.

    Source code(tar.gz)
    Source code(zip)
  • v2.4.6(Nov 26, 2018)

    • MailExtension: Persistent parameter is configurable (#55)
    • Embedding SVG Images in Apple Mail (#53)
    • Mail: check if the function mail() exists #52

    For the details you can have a look at the diff.

    Source code(tar.gz)
    Source code(zip)
  • v2.4.5(Apr 14, 2018)

  • v2.4.4(Feb 6, 2018)

    • Message: fixed wrong content type for .eml files added as attachment #47
    • SmtpMailer: allow setting the client name through config (#46)
    • SmtpSender: Better handling of exceptions thrown when building the message (#43)
    • travis: added PHP 7.2

    For the details you can have a look at the diff.

    Source code(tar.gz)
    Source code(zip)
  • v2.4.3(Jul 14, 2017)

  • v2.4.2(Feb 21, 2017)

  • v2.4.1(Jul 31, 2016)

  • v2.4.0(Jun 25, 2016)

    • requires PHP 5.6
    • Message::setHtmlBody() added new syntax for embedded files [[image.gif]] #29
    • added FallbackMailer #28
    • Message: added addInlinePart() #27
    • SmtpMailer: allow set stream context (#30)
    • uses Nette\SmartObject

    For the details you can have a look at the diff.

    Source code(tar.gz)
    Source code(zip)
  • v2.3.5(Apr 13, 2016)

  • v2.2.5(Dec 3, 2015)

  • v2.3.4(Nov 30, 2015)

    • SmtpMailer: used stream_socket_client instead of fsockopen #19
    • Messages: fixed regexp for propagating links #18

    For the details you can have a look at the diff.

    Source code(tar.gz)
    Source code(zip)
  • v2.3.3(Oct 9, 2015)

  • v2.2.4(Aug 23, 2015)

  • v2.3.2(Jul 3, 2015)

  • v2.3.1(Jul 3, 2015)

  • v2.3.0(Jan 31, 2015)

    • added bridge for Nette DI
    • variable $mail is not automatically passed to templates, you have to do it yourself (BC break) (but better than {var $mail->subject = "Your new order"} is this <title>Your new order</title>, isn't it?)
    • if you have linked images (with relative paths) in template, pass base file path to images as second parameter to setHtmlBody()
    • Message: removes from body</li> </ul> <i class="fa fa-file-code-o m-r-xs" aria-hidden="true"></i><a href="https://api.github.com/repos/nette/mail/tarball/v2.3.0">Source code(tar.gz)</a><br><i class="fa fa-file-code-o m-r-xs" aria-hidden="true"></i><a href="https://api.github.com/repos/nette/mail/zipball/v2.3.0">Source code(zip)</a><br> </article> </div> </div> </div> </li> <li> <div class="d-flex"> <div class="right"> <h4> v2.2.3(Jan 31, 2015) </h4> <div class="review-description"> <article class="markdown-body"> <ul> <li>fix</li> </ul> <p>For the details you can have a look at the <a href="https://github.com/nette/mail/compare/v2.2.2...v2.2.3">diff</a>.</p> <i class="fa fa-file-code-o m-r-xs" aria-hidden="true"></i><a href="https://api.github.com/repos/nette/mail/tarball/v2.2.3">Source code(tar.gz)</a><br><i class="fa fa-file-code-o m-r-xs" aria-hidden="true"></i><a href="https://api.github.com/repos/nette/mail/zipball/v2.2.3">Source code(zip)</a><br> </article> </div> </div> </div> </li> <li> <div class="d-flex"> <div class="right"> <h4> v2.2.2(Aug 27, 2014) </h4> <div class="review-description"> <article class="markdown-body"> <ul> <li>changed & fixed encoding of emails in headers</li> <li>base64 is not used for long headers & where can be quoted string #4</li> <li>setHtmlBody() decodes %XX in URL</li> </ul> <p>For the details you can have a look at the <a href="https://github.com/nette/mail/compare/v2.2.1...v2.2.2">diff</a>.</p> <i class="fa fa-file-code-o m-r-xs" aria-hidden="true"></i><a href="https://api.github.com/repos/nette/mail/tarball/v2.2.2">Source code(tar.gz)</a><br><i class="fa fa-file-code-o m-r-xs" aria-hidden="true"></i><a href="https://api.github.com/repos/nette/mail/zipball/v2.2.2">Source code(zip)</a><br> </article> </div> </div> </div> </li> <li> <div class="d-flex"> <div class="right"> <h4> v2.2.1(Jun 24, 2014) </h4> <div class="review-description"> <article class="markdown-body"> <ul> <li>SendMailMailer: fixed catching of error message</li> </ul> <p>For the details you can have a look at the <a href="https://github.com/nette/mail/compare/v2.2.0...v2.2.1">diff</a>.</p> <i class="fa fa-file-code-o m-r-xs" aria-hidden="true"></i><a href="https://api.github.com/repos/nette/mail/tarball/v2.2.1">Source code(tar.gz)</a><br><i class="fa fa-file-code-o m-r-xs" aria-hidden="true"></i><a href="https://api.github.com/repos/nette/mail/zipball/v2.2.1">Source code(zip)</a><br> </article> </div> </div> </div> </li> </ul> </div> </div> </div> </div> <div class="col-lg-4 right"> <div id="basic" class="tab-pane fade show active"> <div class="box shadow-sm rounded bg-white mb-3"> <div class="box-title border-bottom p-3"> <h6 class="m-0">Owner </h6> </div> <div class="d-flex align-items-center p-3 job-item-header"> <div class="overflow-hidden mr-2"> <h6 class="font-weight-bold -dark mb-0 text-truncate"> Nette Foundation </h6> <div class="small text-gray-500"> </div> </div> <img class="img-fluid ml-auto" style="border-radius: 50%;" src="https://avatars.githubusercontent.com/u/99965?v=4&s=60" alt="Nette Foundation"> </div> <div class="box-body p-3"> <a href="https://github.com/nette/mail" rel="nofollow" target="_blank" class="btn btn-lg btn-block btn-info mb-3"><i class="fa fa-github" aria-hidden="true"></i> GitHub </a> <a href="https://doc.nette.org/mailing" rel="nofollow" target="_blank" class="btn btn-lg btn-block btn-dark mb-3"><i class="fa fa-home" aria-hidden="true"></i> https://doc.nette.org/mailing</a> </div> </div> <div class="box shadow-sm mb-3 rounded bg-white ads-box"> <div class="p-3 border-bottom"> <a href="/repo/protonemedia-laravel-verify-new-email-php-email"><h6 class="font-weight-bold ">This package adds support for verifying new email addresses: when a user updates its email address, it won't replace the old one until the new one is verified.</h6></a> <p class="mb-0 text-muted">Laravel Verify New Email Laravel supports verifying email addresses out of the box. This package adds support for verifying new email addresses. When </p> </div> <div class="p-2"> <img class="lazy img-fluid mr-3" style="border-radius: 50%;max-width: 15%" data-original="https://avatars.githubusercontent.com/u/47979790?v=4&s=40" alt="Protone Media" > <i class="fa fa-star ml-3" aria-hidden="true"></i> 300 <i class="fa fa-clock-o ml-3" aria-hidden="true"></i> Dec 30, 2022 </div> </div> <div class="box shadow-sm mb-3 rounded bg-white ads-box"> <div class="p-3 border-bottom"> <a href="/repo/willdurand-emailreplyparser"><h6 class="font-weight-bold ">EmailReplyParser is a PHP library for parsing plain text email content, based on GitHub's email_reply_parser library written in Ruby</h6></a> <p class="mb-0 text-muted">EmailReplyParser EmailReplyParser is a PHP library for parsing plain text email content, based on GitHub's email_reply_parser library written in Ruby.</p> </div> <div class="p-2"> <img class="lazy img-fluid mr-3" style="border-radius: 50%;max-width: 15%" data-original="https://avatars.githubusercontent.com/u/217628?v=4&s=40" alt="William Durand" > <i class="fa fa-star ml-3" aria-hidden="true"></i> 606 <i class="fa fa-clock-o ml-3" aria-hidden="true"></i> Dec 8, 2022 </div> </div> <div class="box shadow-sm mb-3 rounded bg-white ads-box"> <div class="p-3 border-bottom"> <a href="/repo/willdurand-EmailReplyParser-php-email"><h6 class="font-weight-bold ">PHP library for parsing plain text email content.</h6></a> <p class="mb-0 text-muted">EmailReplyParser EmailReplyParser is a PHP library for parsing plain text email content, based on GitHub's email_reply_parser library written in Ruby.</p> </div> <div class="p-2"> <img class="lazy img-fluid mr-3" style="border-radius: 50%;max-width: 15%" data-original="https://avatars.githubusercontent.com/u/217628?v=4&s=40" alt="William Durand" > <i class="fa fa-star ml-3" aria-hidden="true"></i> 606 <i class="fa fa-clock-o ml-3" aria-hidden="true"></i> Dec 8, 2022 </div> </div> <div class="box shadow-sm mb-3 rounded bg-white ads-box"> <div class="p-3 border-bottom"> <a href="/repo/mettle-sendportal"><h6 class="font-weight-bold ">SendPortal - Open-source self-hosted email marketing, subscriber and list management, email campaigns and more</h6></a> <p class="mb-0 text-muted">SendPortal includes subscriber and list management, email campaigns, message tracking, reports and multiple workspaces/domains in a modern, flexible and scalable application.</p> </div> <div class="p-2"> <img class="lazy img-fluid mr-3" style="border-radius: 50%;max-width: 15%" data-original="https://avatars.githubusercontent.com/u/1176340?v=4&s=40" alt="Mettle" > <i class="fa fa-star ml-3" aria-hidden="true"></i> 1.2k <i class="fa fa-clock-o ml-3" aria-hidden="true"></i> Jan 4, 2023 </div> </div> <div class="box shadow-sm mb-3 rounded bg-white ads-box"> <div class="p-3 border-bottom"> <a href="/repo/experius-magento-2-module-experius-email-catcher"><h6 class="font-weight-bold ">Magento 2 Email Catcher or Email Logger Module. </h6></a> <p class="mb-0 text-muted">Magento 2 Module Experius email catcher / - logger</p> </div> <div class="p-2"> <img class="lazy img-fluid mr-3" style="border-radius: 50%;max-width: 15%" data-original="https://avatars.githubusercontent.com/u/3177384?v=4&s=40" alt="Experius" > <i class="fa fa-star ml-3" aria-hidden="true"></i> 49 <i class="fa fa-clock-o ml-3" aria-hidden="true"></i> Dec 16, 2021 </div> </div> <div class="box shadow-sm mb-3 rounded bg-white ads-box"> <div class="p-3 border-bottom"> <a href="/repo/fgribreau-mailchecker"><h6 class="font-weight-bold ">Cross-language email validation. Backed by a database of over 38 000 throwable email domains.</h6></a> <p class="mb-0 text-muted">Cross-language temporary (disposable/throwaway) email detection library. Covers 38038+ fake email providers.</p> </div> <div class="p-2"> <img class="lazy img-fluid mr-3" style="border-radius: 50%;max-width: 15%" data-original="https://avatars.githubusercontent.com/u/138050?v=4&s=40" alt="Francois-Guillaume Ribreau" > <i class="fa fa-star ml-3" aria-hidden="true"></i> 1.4k <i class="fa fa-clock-o ml-3" aria-hidden="true"></i> Jan 9, 2023 </div> </div> <div class="box shadow-sm mb-3 rounded bg-white ads-box"> <div class="p-3 border-bottom"> <a href="/repo/Webklex-laravel-imap-php-email"><h6 class="font-weight-bold ">Laravel IMAP is an easy way to integrate both the native php-imap module and an extended custom imap protocol into your Laravel app.</h6></a> <p class="mb-0 text-muted">Laravel IMAP is an easy way to integrate both the native php-imap module and an extended custom imap protocol into your Laravel app. This enables your app to not only respond to new emails but also allows it to read and parse existing mails and much more.</p> </div> <div class="p-2"> <img class="lazy img-fluid mr-3" style="border-radius: 50%;max-width: 15%" data-original="https://avatars.githubusercontent.com/u/2884144?v=4&s=40" alt="null" > <i class="fa fa-star ml-3" aria-hidden="true"></i> 530 <i class="fa fa-clock-o ml-3" aria-hidden="true"></i> Jan 6, 2023 </div> </div> <div class="box shadow-sm mb-3 rounded bg-white ads-box"> <div class="p-3 border-bottom"> <a href="/repo/acmailer-acmailer-php-email"><h6 class="font-weight-bold ">Mail sending module for Mezzio and Laminas MVC with support for file attachment and template email composition</h6></a> <p class="mb-0 text-muted">This module provides an easy and flexible way to send emails from Mezzio and Laminas MVC applications (formerly known as Zend Expressive and Zend MVC). It allows you to pre-configure emails and transports, and then send those emails at runtime.</p> </div> <div class="p-2"> <img class="lazy img-fluid mr-3" style="border-radius: 50%;max-width: 15%" data-original="https://avatars.githubusercontent.com/u/59024549?v=4&s=40" alt="null" > <i class="fa fa-star ml-3" aria-hidden="true"></i> 82 <i class="fa fa-clock-o ml-3" aria-hidden="true"></i> Jan 16, 2022 </div> </div> <div class="box shadow-sm mb-3 rounded bg-white ads-box"> <div class="p-3 border-bottom"> <a href="/repo/PHPMailer-PHPMailer-php-email"><h6 class="font-weight-bold ">The classic email sending library for PHP</h6></a> <p class="mb-0 text-muted">PHPMailer – A full-featured email creation and transfer class for PHP Features Probably the world's most popular code for sending email from PHP! Used</p> </div> <div class="p-2"> <img class="lazy img-fluid mr-3" style="border-radius: 50%;max-width: 15%" data-original="https://avatars.githubusercontent.com/u/3959702?v=4&s=40" alt="PHPMailer" > <i class="fa fa-star ml-3" aria-hidden="true"></i> 19k <i class="fa fa-clock-o ml-3" aria-hidden="true"></i> Jan 1, 2023 </div> </div> <div class="box shadow-sm mb-3 rounded bg-white ads-box"> <div class="p-3 border-bottom"> <a href="/repo/nojacko-email-validator-php-email"><h6 class="font-weight-bold ">Small PHP library to valid email addresses using a number of methods.</h6></a> <p class="mb-0 text-muted">Email Validator Small PHP library to valid email addresses using a number of methods. Features Validates email address Checks for example domains (e.g</p> </div> <div class="p-2"> <img class="lazy img-fluid mr-3" style="border-radius: 50%;max-width: 15%" data-original="https://avatars.githubusercontent.com/u/1667141?v=4&s=40" alt="James Jackson" > <i class="fa fa-star ml-3" aria-hidden="true"></i> 154 <i class="fa fa-clock-o ml-3" aria-hidden="true"></i> Dec 31, 2022 </div> </div> <div class="box shadow-sm mb-3 rounded bg-white ads-box"> <div class="p-3 border-bottom"> <a href="/repo/tedivm-Fetch"><h6 class="font-weight-bold ">Fetch is a library for reading email and attachments, primarily using the POP and IMAP protocols</h6></a> <p class="mb-0 text-muted">Fetch Fetch is a library for reading email and attachments, primarily using the POP and IMAP protocols. Installing N.b. A note on Ubuntu 14.04 (probab</p> </div> <div class="p-2"> <img class="lazy img-fluid mr-3" style="border-radius: 50%;max-width: 15%" data-original="https://avatars.githubusercontent.com/u/7403633?v=4&s=40" alt="Tedious Developments" > <i class="fa fa-star ml-3" aria-hidden="true"></i> 501 <i class="fa fa-clock-o ml-3" aria-hidden="true"></i> Jan 4, 2023 </div> </div> <div class="box shadow-sm mb-3 rounded bg-white ads-box"> <div class="p-3 border-bottom"> <a href="/repo/henrikbjorn-Stampie-php-email"><h6 class="font-weight-bold ">Library for using online Email providers</h6></a> <p class="mb-0 text-muted">Stampie Stampie have been moved to the "Flint" organization in order to get a better collaborative flow. Stampie is a simple API Wrapper for different</p> </div> <div class="p-2"> <img class="lazy img-fluid mr-3" style="border-radius: 50%;max-width: 15%" data-original="https://avatars.githubusercontent.com/u/19725?v=4&s=40" alt="Henrik Bjørnskov" > <i class="fa fa-star ml-3" aria-hidden="true"></i> 32 <i class="fa fa-clock-o ml-3" aria-hidden="true"></i> Oct 7, 2020 </div> </div> <div class="box shadow-sm mb-3 rounded bg-white ads-box"> <div class="p-3 border-bottom"> <a href="/repo/Stampie-Stampie-php-email"><h6 class="font-weight-bold ">Library for using online Email providers</h6></a> <p class="mb-0 text-muted">Stampie Stampie is a simple API Wrapper for different email providers such as Postmark and SendGrid. It is very easy to use and to integrate into your</p> </div> <div class="p-2"> <img class="lazy img-fluid mr-3" style="border-radius: 50%;max-width: 15%" data-original="https://avatars.githubusercontent.com/u/25911053?v=4&s=40" alt="Stampie" > <i class="fa fa-star ml-3" aria-hidden="true"></i> 288 <i class="fa fa-clock-o ml-3" aria-hidden="true"></i> Dec 31, 2022 </div> </div> <div class="box shadow-sm mb-3 rounded bg-white ads-box"> <div class="p-3 border-bottom"> <a href="/repo/readytouse-php-script-for-sending-emails-with-an-html-template-will-use-a-gmail-account-as-the-sender-and-you-will-not-need-any-email-server-powered"><h6 class="font-weight-bold ">A ready-to-use PHP script for sending Emails with an HTML Template will use a Gmail account as the sender and you will not need any email server. Powered by PHPMailer.</h6></a> <p class="mb-0 text-muted">Gmail Email Sender by PHP A ready-to-use PHP script for sending Emails with an HTML Template will use a Gmail account as the sender and you will not n</p> </div> <div class="p-2"> <img class="lazy img-fluid mr-3" style="border-radius: 50%;max-width: 15%" data-original="https://avatars.githubusercontent.com/u/2658040?v=4&s=40" alt="Max Base" > <i class="fa fa-star ml-3" aria-hidden="true"></i> 4 <i class="fa fa-clock-o ml-3" aria-hidden="true"></i> Oct 29, 2022 </div> </div> <div class="box shadow-sm mb-3 rounded bg-white ads-box"> <div class="p-3 border-bottom"> <a href="/repo/nguyenanhung-omnisend-php-email"><h6 class="font-weight-bold ">Omnisend: Ecommerce Email Marketing and SMS Platform</h6></a> <p class="mb-0 text-muted">Omnisend Omnisend: Ecommerce Email Marketing and SMS Platform Version v1.x Support all PHP Version >=5.6 v2.x Support all PHP Version >=7.0 Installati</p> </div> <div class="p-2"> <img class="lazy img-fluid mr-3" style="border-radius: 50%;max-width: 15%" data-original="https://avatars.githubusercontent.com/u/9348255?v=4&s=40" alt="Hung Nguyen" > <i class="fa fa-star ml-3" aria-hidden="true"></i> 3 <i class="fa fa-clock-o ml-3" aria-hidden="true"></i> Jan 6, 2022 </div> </div> <div class="box shadow-sm mb-3 rounded bg-white ads-box"> <div class="p-3 border-bottom"> <a href="/repo/ZLaxtert-Email-Generator"><h6 class="font-weight-bold ">EMAIL, PASSWORD AND USERNAME GENERATOR</h6></a> <p class="mb-0 text-muted">Email-Generator EMAIL, PASSWORD AND USERNAME GENERATOR Install on desktop : Install XAMPP Added environment variable system path => C:\xampp\php downl</p> </div> <div class="p-2"> <img class="lazy img-fluid mr-3" style="border-radius: 50%;max-width: 15%" data-original="https://avatars.githubusercontent.com/u/70899617?v=4&s=40" alt="Alex" > <i class="fa fa-star ml-3" aria-hidden="true"></i> 2 <i class="fa fa-clock-o ml-3" aria-hidden="true"></i> Jan 8, 2022 </div> </div> <div class="box shadow-sm mb-3 rounded bg-white ads-box"> <div class="p-3 border-bottom"> <a href="/repo/stampie-stampie"><h6 class="font-weight-bold ">Stampie is a simple API Wrapper for different email providers such as Postmark and SendGrid.</h6></a> <p class="mb-0 text-muted">Stampie Stampie is a simple API Wrapper for different email providers such as Postmark and SendGrid. It is very easy to use and to integrate into your</p> </div> <div class="p-2"> <img class="lazy img-fluid mr-3" style="border-radius: 50%;max-width: 15%" data-original="https://avatars.githubusercontent.com/u/25911053?v=4&s=40" alt="Stampie" > <i class="fa fa-star ml-3" aria-hidden="true"></i> 289 <i class="fa fa-clock-o ml-3" aria-hidden="true"></i> Dec 5, 2022 </div> </div> <div class="box shadow-sm mb-3 rounded bg-white ads-box"> <div class="p-3 border-bottom"> <a href="/repo/omnimail-omnimail-php-email"><h6 class="font-weight-bold ">Send email across all platforms using one interface</h6></a> <p class="mb-0 text-muted">Send email across all platforms using one interface. Table Of Content Requirements Installation Providers AmazonSES Mailgun Mailjet Mandrill Postmark </p> </div> <div class="p-2"> <img class="lazy img-fluid mr-3" style="border-radius: 50%;max-width: 15%" data-original="https://avatars.githubusercontent.com/u/69866491?v=4&s=40" alt="Omnimail" > <i class="fa fa-star ml-3" aria-hidden="true"></i> 329 <i class="fa fa-clock-o ml-3" aria-hidden="true"></i> Dec 30, 2022 </div> </div> <div class="box shadow-sm mb-3 rounded bg-white ads-box"> <div class="p-3 border-bottom"> <a href="/repo/rajurayhan-laravel-ews-mail-server-php-email"><h6 class="font-weight-bold ">Sending Email via Microsoft Exchange Web Services made Easy! </h6></a> <p class="mb-0 text-muted">Send Mail via Exchange Web Services! Sending Email via Microsoft Exchange Web Services (EWS) made easy! Installation Install via Composer composer req</p> </div> <div class="p-2"> <img class="lazy img-fluid mr-3" style="border-radius: 50%;max-width: 15%" data-original="https://avatars.githubusercontent.com/u/6824950?v=4&s=40" alt="Raju Rayhan" > <i class="fa fa-star ml-3" aria-hidden="true"></i> 19 <i class="fa fa-clock-o ml-3" aria-hidden="true"></i> Jul 19, 2022 </div> </div> </div> </div> </div> </div> <!-- footer --> <footer class="bg-white"> <div class="container"> <div class="copyright"> <div class="logo"> <a href="/"> <img src="/assets/images/logo_bestofphp.png"> </a> </div> <p>2022.bestofphp </p> </div> </div> </footer> <!-- footer--> <!-- Bootstrap core JavaScript --> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js" integrity="sha512-bnIvzh6FU75ZKxp0GXLH9bewza/OIw6dLVh9ICg0gogclmYGguQJWl8U30WpbsGTqbIiAwxTsbe76DErLq5EDQ==" crossorigin="anonymous"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.5.0/js/bootstrap.bundle.min.js" integrity="sha512-Oy5BruJdE3gP9+LMJ11kC5nErkh3p4Y0GawT1Jrcez4RTDxODf3M/KP3pEsgeOYxWejqy2SPnj+QMpgtvhDciQ==" crossorigin="anonymous"></script> <!-- select2 Js --> <script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.13/js/select2.min.js" integrity="sha512-2ImtlRlf2VVmiGZsjm9bEyhjGW4dU7B6TNwh/hx/iSByxNENtj3WVE6o/9Lj4TJeVXPi4bnOIMXFIJJAeufa0A==" crossorigin="anonymous"></script> <!-- Custom --> <script src="/assets/js/custom.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.lazyload/1.9.1/jquery.lazyload.min.js"></script> <script> $(function() { $("img.lazy").lazyload({ threshold :180, failurelimit :20, effect : "fadeIn" }); }); </script> <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/highlight.min.js"></script> <script> hljs.initHighlightingOnLoad(); </script> </body> </html><script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script>