项目作者: ddrv

项目描述 :
PHP library for sending email
高级语言: PHP
项目地址: git://github.com/ddrv/php-mailer.git
创建时间: 2017-08-02T05:09:32Z
项目社区:https://github.com/ddrv/php-mailer

开源协议:MIT License

下载


Latest Stable Version
Total Downloads
License
PHP

Mailer

PHP library for sending email.

Install

  1. Run in console:

    1. composer require ddrv/mailer:^5
  2. Include autoload file

    1. require_once('vendor/autoload.php');

Usage

Creating transport instance

Sendmail

  1. <?php
  2. $transport = new Ddrv\Mailer\Transport\SendmailTransport(
  3. '-f' // sendmail options
  4. );

SMTP

  1. <?php
  2. $transport = new Ddrv\Mailer\Transport\SmtpTransport(
  3. 'smtp.fight.club', // host (REQUIRED)
  4. 25, // port (REQUIRED)
  5. 'info', // login (REQUIRED)
  6. 'super-secret', // password (REQUIRED)
  7. 'joe@fight.club', // sender email (REQUIRED)
  8. null, // encryption: 'tls', 'ssl' or null
  9. 'http://fight.club' // domain
  10. );

Fake (emulation send emails)

  1. <?php
  2. $transport = new Ddrv\Mailer\Transport\FakeTransport();

Custom

You can implement Ddrv\Mailer\Contract\Transport interface

  1. <?php
  2. /** @var Ddrv\Mailer\Contract\Transport $transport */

Creating mailer instance

  1. <?php
  2. /** @var Ddrv\Mailer\Contract\Transport $transport */
  3. $mailer = new Ddrv\Mailer\Mailer($transport);

Creating message instance

  1. <?php
  2. $message = new Ddrv\Mailer\Message(
  3. 'Subject', // Subject
  4. '<p>HTML</p>', // HTML body
  5. 'Simple text.' // Text plain body
  6. );

Sending message

  1. <?php
  2. /**
  3. * @var Ddrv\Mailer\Contract\Message $message
  4. * @var Ddrv\Mailer\Mailer $mailer
  5. */
  6. $mailer->send($message);

Message methods

  1. <?php
  2. /** @var Ddrv\Mailer\Message $message */
  3. $message->setSubject('Welcome to Fight Club!');
  4. $message->setText('Welcome to Fight Club!' . PHP_EOL . 'Please, read our rules in attachments.');
  5. $html = '<h1>Welcome to Fight Club!</h1><p>Please, read our rules in attachments.</p>';
  6. $html .= '<img src="cid:poster" alt="Poster"/><img src="cid:ticket" alt="Your ticket"/>';
  7. $message->setHtml($html);
  8. $message->setSender('support@fight.club', 'Support od Fight Club'); // The SMTP transport will set its value.
  9. $message->addRecipient('tyler@fight.club', 'Tyler Durden', Ddrv\Mailer\Message::RECIPIENT_TO);
  10. $message->addRecipient('bob@fight.club', 'Robert Paulson', Ddrv\Mailer\Message::RECIPIENT_CC);
  11. $message->addRecipient('angel@fight.club', 'Angel Face', Ddrv\Mailer\Message::RECIPIENT_BCC);
  12. $message->addRecipient('r.chesler@car-vendor.com', 'Richard Chesler', Ddrv\Mailer\Message::RECIPIENT_TO);
  13. $message->getRecipientName('bob@fight.club'); // Returns 'Robert Paulson'.
  14. $message->getRecipientName('unknown@fight.club'); // Returns null.
  15. $message->removeRecipient('r.chesler@car-vendor.com'); // If you change your mind.
  16. // You may remove recipients by type
  17. $message->removeRecipients(Ddrv\Mailer\Message::RECIPIENT_TO);
  18. $message->removeRecipients(Ddrv\Mailer\Message::RECIPIENT_CC);
  19. $message->removeRecipients(Ddrv\Mailer\Message::RECIPIENT_BCC);
  20. // Or all
  21. $message->removeRecipients();
  22. $message->addRecipient('tyler@fight.club', 'Tyler Durden', Ddrv\Mailer\Message::RECIPIENT_TO);
  23. $message->addRecipient('bob@fight.club', 'Robert Paulson', Ddrv\Mailer\Message::RECIPIENT_CC);
  24. $message->addRecipient('angel@fight.club', 'Angel Face', Ddrv\Mailer\Message::RECIPIENT_BCC);
  25. $rules = <<<TEXT
  26. 1. You don't talk about fight club.
  27. 2. You don't talk about fight club.
  28. 3. When someone says stop, or goes limp, the fight is over.
  29. 4. Only two guys to a fight.
  30. 5. One fight at a time.
  31. 6. They fight without shirts or shoes.
  32. 7. The fights go on as long as they have to.
  33. 8. If this is your first night at fight club, you have to fight.
  34. TEXT;
  35. $message->attachFromString(
  36. 'rules.txt', // Attachment name (REQUIRED)
  37. $rules, // Contents (REQUIRED)
  38. 'text/plain; charset=UTF-8' // Mime Type
  39. );
  40. $path = '/home/tyler/docs/projects/mayhem/rules.txt';
  41. $message->attachFromFile(
  42. 'project-mayhem.txt', // Attachment name (REQUIRED)
  43. $path, // Path to attached file (REQUIRED)
  44. 'text/plain; charset=UTF-8' // Mime Type
  45. );
  46. $message->detach('project-mayhem.txt'); // If you change your mind.
  47. $message->setHtmlContentFromString(
  48. 'ticket', // HTML Content ID
  49. file_get_contents('/home/tyler/tickets/038994.jpg'), // Contents (REQUIRED)
  50. 'image/jpeg' // Mime Type
  51. );
  52. $message->setHtmlContentFromString(
  53. 'script', // HTML Content ID
  54. 'alert("ok");', // Contents (REQUIRED)
  55. 'application/javascript' // Mime Type
  56. );
  57. $message->setHtmlContentFromFile(
  58. 'poster', // HTML Content ID
  59. '/home/tyler/images/fight-club.jpg', // Path to file (REQUIRED)
  60. 'image/jpeg' // Mime Type
  61. );
  62. $message->unsetBodyHtmlContent('script'); // If you change your mind.
  63. $message->hasHeader('X-Some-Header'); // Returns false.
  64. $message->setHeader('X-Some-Header', 'Value'); // Header set.
  65. $message->hasHeader('X-Some-Header'); // Returns true.
  66. $message->getHeader('X-Some-Header'); // Returns 'Value'.
  67. $message->removeHeader('X-Some-Header'); // Header removed.
  68. $message->hasHeader('X-Some-Header'); // Returns false.
  69. $message->getRecipients(); // Returns array if recipients emails.
  70. $message->getSubject(); // Returns mail subject.
  71. $message->getHeadersRaw(); // Returns string of mail headers.
  72. $message->getBodyRaw(); // Returns string of mail body.

You can implement Ddrv\Mailer\Contract\Message interface for work with custom messages.

Spool

This package allows you to use mail spool.

This requires:

  • create a spool object (instance of Ddrv\Mailer\Contract\Spool)
  • create a transport object (instance of Ddrv\Mailer\Contract\Transport)
  • wrap them up in special transport Ddrv\Mailer\Transport\SpoolTransport
  1. <?php
  2. /**
  3. * @var Ddrv\Mailer\Contract\Transport $transport
  4. * @var Ddrv\Mailer\Contract\Message $message1
  5. * @var Ddrv\Mailer\Contract\Message $message2
  6. */
  7. $spool = new Ddrv\Mailer\Spool\MemorySpool();
  8. // or
  9. $spool = new Ddrv\Mailer\Spool\FileSpool('/path/to/emails');
  10. // Or any implementation of Ddrv\Mailer\Contract\Spool
  11. $wrapper = new Ddrv\Mailer\Transport\SpoolTransport($transport, $spool);
  12. $mailer = new Ddrv\Mailer\Mailer($wrapper);
  13. $mailer->send($message1);
  14. $mailer->send($message2);
  15. // Now the letters will only be added to the queue.
  16. // To send them, you need to execute:
  17. $wrapper->flush(
  18. 100, // Number of emails sent.
  19. 5 // Number of attempts to send emails.
  20. );

Personal mailing

If you have a copy of a message with many recipients, but you want to send separate emails to each recipient (no copies)

  1. <?php
  2. /**
  3. * @var Ddrv\Mailer\Mailer $mailer
  4. * @var Ddrv\Mailer\Contract\Message $message
  5. */
  6. $mailer->personal($message);

Transport factory

If you use native library transport, you can use Ddrv\Mailer\TransportFactory.

  1. <?php
  2. use Ddrv\Mailer\TransportFactory;
  3. // smtp
  4. $transport = TransportFactory::make('smtp://user:password@example.com:465/?encryption=tls&domain=example.com&sender=user%40exapmle.com&name=Informer');
  5. // sendmail
  6. $transport = TransportFactory::make('sendmail://localhost/?options=-i+-r+user%40example.com');
  7. // file
  8. $transport = TransportFactory::make('file:////path/to/mail/files');
  9. // fake
  10. $transport = TransportFactory::make('fake://localhost');