This is a simple app for sending emails through PHP without blocking sending and waiting answer from the SMTP server. It provides some classes as:
Message
to compose the messageServer
to connect to the SMTP serverSender
to run and send the queued messagesRunner
to fire a Sender object
First we need the server configurations. There is a sample file on the test
dir, called delayedmail.ini
:
host = smtp.gmail.com
port = 587
user = taq
password = secret
path = /tmp/delayedmailtest
The only different parameter there is the path
parameter. This is where the
mail files will be stored.
VERY IMPORTANT
If you use two-phase authentication on a Gmail account, sending emails with this library will not work. You need a less secure account to make it works.
The data store used are just regular plain text files. They are stored on the
path
configured above. On that dir there will be another two subdirs:
delivery
where the queued messages are.sent
, where the messages are moved afterSender
send them.error
, where the messages are moved if there are some errors on them.
Just include the delayedmail.php
on your app, create a new Server
object,
configure it, compose and queue a new message:
<?php
include_once "delayedmail.php";
$server = new DelayedMail\Server("myconfigs.ini");
$msg = new DelayedMail\Message();
$msg->from("taq <eustaquiorangel@gmail.com>")->
to("Eustaquio Rangel <taq@bluefish.com.br>")->
cc("Eustaquio Rangel <taq@anotherhost.com>")->
subject("DelayedMail test!")->
text("This is just\na test!")->
attach("taq.jpg");
$server->push($msg);
?>
If you check the delivery
dir now, there will be a file there with the message
contents.
You can use arrays on attach
and cc
.
Just edit the runner.php
file with the desired interval and configuration file
(usually the same config file as the server) and run it from the command line:
<?php
$dir = dirname(__FILE__);
echo "- loading classes from $dir\n";
include_once "$dir/delayedmail.php";
$sender = new DelayedMail\Sender(5,"delayedmail.ini");
$sender->run();
?>
$ php runner.php
- initializing ...
- checking for files in /tmp/delayedmailtest/delivery ...
- no files found.
Go to the test
directory, configure the delayedmail.ini
and test.php
files
to the configs you want, and run:
$ php test.php
And then check your email app on the addresses you configured.
Run composer update
, go to the test
directory and run:
$ phpunit .