tigrov / email-reply
Email reply - passes reply messages to predefined objects.
1.0.4
2019-07-16 11:17 UTC
Requires
- php: >=7.1
- ext-iconv: *
- ext-imap: *
- ext-mbstring: *
- ddeboer/imap: ^1.6
Suggests
- willdurand/email-reply-parser: To parse content from email messages.
README
The library passes reply messages from email to predefined objects. It uses IMAP to connect email servers.
Limitation
The library uses ddeboer/imap and it requires:
- PHP >= 7.1
- extensions
iconv
,IMAP
,mbstring
Installation
The preferred way to install this extension is through composer.
Either run
php composer.phar require --prefer-dist tigrov/email-reply
or add
"tigrov/email-reply": "~1.0"
to the require section of your composer.json
file.
Usage
First of all you need to configure your email server. Create special mailbox and redirect all the mails sent to non-existent mailboxes. The server must accepts IMAP connections.
Then you can take steps:
- Create a model class with
ModelInterface
interface and implement the necessary methods (seeexamples/Model.php
).class Model implements ModelInterface { public static function paramNames() {} public function paramValues() {} public static function buildFromParams($paramValues) {} public function emailReply($message) {} }
- Create and configure
EmailReply
object.$config = [ 'classesMap' => [ // key will be used as prefix for email address 'model' => \Model::class, // email for reply will be like model5@domain.com // or // 'm' => \Model::class, // email for reply will be like m5@domain.com // where 5 is id of a model ], ]; $emailReply = new EmailReply($config);
- Send a email message with a special reply email address.
$email = $emailReply->getReplyEmail($model, 'domain.com'); // Send an email to somebody with the reply email $email // ...
- Read your mailboxes using IMAP. For example as
cron
job.$server = new Server($host, $port); $connection = $server->authenticate($username, $password); $mailboxModels = Reader::getMailboxModels($connection); $messages = Reader::getIterator($mailboxModels); $emailReply->read($messages); $connection->expunge();
- Each message will be passed to
ModelInterface::emailReply($message)
where you can precess them.class Model implements ModelInterface { // ... public function emailReply($message) { /** @var string $fromEmail email address of the sender */ $fromEmail = $message->getFrom()->getAddress(); /** @var string $fromName name of the sender */ $fromName = $message->getFrom()->getName(); /** @var string $content content from the replied message */ $content = $message->getBodyHtml() ?: $message->getBodyText() ?: $message->getDecodedContent(); // Parse the content to get only answer $content = EmailReplyParser::parseReply($content); // To do something with $content // e.g. add comment from $fromEmail to the object }
See examples directory for examples.
Also see EmailReply for Yii2.
Suggests
You can use willdurand/email-reply-parser to parse only reply text from email messages.
$reply = EmailReplyParser::parseReply($content);