Advertisement
Guest User

Untitled

a guest
Dec 12th, 2013
167
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 11.99 KB | None | 0 0
  1. <?php
  2. /**
  3.  * Mail sending management
  4.  *
  5.  * @author Darth Killer
  6.  */
  7.  
  8. class Mailer {
  9.     const HEADER_ABUSE_REPORTS_TO = 'Abuse-Reports-To',
  10.             HEADER_ALSO_CONTROL = 'Also-Control',
  11.             HEADER_ALTERNATE_RECIPIENT = 'Alternate-Recipient',
  12.             HEADER_APPARENTLY_TO = 'Apparently-To',
  13.             HEADER_APPROVED = 'Approved',
  14.             HEADER_APPROVED_BY = 'Approved-By',
  15.             HEADER_ARTICLE_NAMES = 'Article-Names',
  16.             HEADER_ARTICLE_UPDATES = 'Article-Updates',
  17.             HEADER_AUTOFORWARDED = 'Autoforwarded',
  18.             HEADER_AUTO_FORWARDED = 'Auto-Forwarded',
  19.             HEADER_BCC = 'Bcc',
  20.             HEADER_CACHE_POST_PATH = 'Cache-Post-Path',
  21.             HEADER_CC = 'Cc',
  22.             HEADER_COMMENTS = 'Comments',
  23.             HEADER_CONTENT_ALIAS = 'Content-Alias',
  24.             HEADER_CONTENT_ALTERNATIVE = 'Content-Alternative',
  25.             HEADER_CONTENT_BASE = 'Content-Base',
  26.             HEADER_CONTENT_CLASS = 'Content-Class',
  27.             HEADER_CONTENT_CONVERSION = 'Content-Conversion',
  28.             HEADER_CONTENT_DESCRIPTION = 'Content-Description',
  29.             HEADER_CONTENT_DISPOSITION = 'Content-Disposition',
  30.             HEADER_CONTENT_FEATURES = 'Content-Features',
  31.             HEADER_CONTENT_ID = 'Content-ID',
  32.             HEADER_CONTENT_IDENTIFIER = 'Content-Identifier',
  33.             HEADER_CONTENT_LANGUAGE = 'Content-Language',
  34.             HEADER_CONTENT_LENGTH = 'Content-Length',
  35.             HEADER_CONTENT_LOCATION = 'Content-Location',
  36.             HEADER_CONTENT_MD5 = 'Content-MD5',
  37.             HEADER_CONTENT_RETURN = 'Content-Return',
  38.             HEADER_CONTENT_SGML_ENTITY = 'Content-SGML-Entity',
  39.             HEADER_CONTENT_TRANSFER_ENCODING = 'Content-Transfer-Encoding',
  40.             HEADER_CONTENT_TYPE = 'Content-Type',
  41.             HEADER_CONTROL = 'Control',
  42.             HEADER_CONVERSION = 'Conversion',
  43.             HEADER_CONVERSION_WITH_LOSS = 'Conversion-With-Loss',
  44.             HEADER_DATE = 'Date',
  45.             HEADER_DELIVERED_TO = 'Delivered-To',
  46.             HEADER_DELIVERY_DATE = 'Delivery-Date',
  47.             HEADER_DISCARDED_X400_IPMS_EXTENSIONS = 'Discarded-X400-IPMS-Extensions',
  48.             HEADER_DISCARDED_X400_MTS_EXTENSIONS = 'Discarded-X400-MTS-Extensions',
  49.             HEADER_DISCLOSE_RECIPIENTS = 'Disclose-Recipients',
  50.             HEADER_DISPOSITION_NOTIFICATION_OPTIONS = 'Disposition-Notification-Options',
  51.             HEADER_DISPOSITION_NOTIFICATION_TO = 'Disposition-Notification-To',
  52.             HEADER_DISTRIBUTION = 'Distribution',
  53.             HEADER_DL_EXPANSION_HISTORY_INDICATION = 'DL-Expansion-History-Indication',
  54.             HEADER_ENCODING = 'Encoding',
  55.             HEADER_ERRORS_TO = 'Errors-To',
  56.             HEADER_ENVELOPE_ID = 'Envelope-ID',
  57.             HEADER_EXPIRES = 'Expires',
  58.             HEADER_EXPIRY_DATE = 'Expiry-Date',
  59.             HEADER_FAX = 'Fax',
  60.             HEADER_FCC = 'Fcc',
  61.             HEADER_FOLLOWUP_TO = 'Followup-To',
  62.             HEADER_FOR_APPROVAL = 'For-Approval',
  63.             HEADER_FOR_COMMENT = 'For-Comment',
  64.             HEADER_FOR_HANDLING = 'For-Handling',
  65.             HEADER_FROM = 'From',
  66.             HEADER_GENERATE_DELIVERY_REPORT = 'Generate-Delivery-Report',
  67.             HEADER_IMPORTANCE = 'Importance',
  68.             HEADER_IN_REPLY_TO = 'In-Reply-To',
  69.             HEADER_INCOMPLETE_COPY = 'Incomplete-Copy',
  70.             HEADER_INJECTOR_INFO = 'Injector-Info',
  71.             HEADER_KEYWORDS = 'Keywords',
  72.             HEADER_LANGUAGE = 'Language',
  73.             HEADER_LINES = 'Lines',
  74.             HEADER_LIST_ARCHIVE = 'List-Archive',
  75.             HEADER_LIST_DIGEST = 'List-Digest',
  76.             HEADER_LIST_ID = 'List-ID',
  77.             HEADER_LIST_OWNER = 'List-Owner',
  78.             HEADER_LIST_POST = 'List-Post',
  79.             HEADER_LIST_SOFTWARE = 'List-Software',
  80.             HEADER_LIST_SUBSCRIBE = 'List-Subscribe',
  81.             HEADER_LIST_UNSUBSCRIBE = 'List-Unsubscribe',
  82.             HEADER_LIST_URL = 'List-URL',
  83.             HEADER_MAIL_COPIES_TO = 'Mail-Copies-To',
  84.             HEADER_MAIL_REPLY_REQUESTED_BY = 'Mail-Reply-Requested-By',
  85.             HEADER_MAIL_SYSTEM_VERSION = 'Mail-System-Version',
  86.             HEADER_MAILER = 'Mailer',
  87.             HEADER_MAILING_LIST = 'Mailing-List',
  88.             HEADER_MESSAGE_ID = 'Message-ID',
  89.             HEADER_MESSAGE_TYPE = 'Message-Type',
  90.             HEADER_MIME_VERSION = 'MIME-Version',
  91.             HEADER_NEWSGROUPS = 'Newsgroups',
  92.             HEADER_NNTP_POSTING_DATE = 'NNTP-Posting-Date',
  93.             HEADER_NNTP_POSTING_HOST = 'NNTP-Posting-Host',
  94.             HEADER_NNTP_POSTING_TIME = 'NNTP-Posting-Time',
  95.             HEADER_NNTP_PROXY_RELAY = 'NNTP-Proxy-Relay',
  96.             HEADER_OBSOLETES = 'Obsoletes',
  97.             HEADER_OLD_DATE = 'Old-Date',
  98.             HEADER_OLD_X_ENVELOPE_FROM = 'Old-X-Envelope-From',
  99.             HEADER_OLD_X_ENVELOPE_TO = 'Old-X-Envelope-To',
  100.             HEADER_ORGANISATION = 'Organisation',
  101.             HEADER_ORGANIZATION = 'Organization',
  102.             HEADER_ORIGINAL_ENCODED_INFORMATION_TYPES = 'Original-Encoded-Information-Types',
  103.             HEADER_ORIGINAL_RECIPIENT = 'Original-Recipient',
  104.             HEADER_ORIGINATING_CLIENT = 'Originating-Client',
  105.             HEADER_ORIGINATOR = 'Originator',
  106.             HEADER_ORIGINATOR_INFO = 'Originator-Info',
  107.             HEADER_PATH = 'Path',
  108.             HEADER_PHONE = 'Phone',
  109.             HEADER_PICS_LABEL = 'PICS-Label',
  110.             HEADER_POSTED_TO = 'Posted-To',
  111.             HEADER_PRECEDENCE = 'Precedence',
  112.             HEADER_PREVENT_NONDELIVERY_REPORT = 'Prevent-NonDelivery-Report',
  113.             HEADER_PRIORITY = 'Priority',
  114.             HEADER_READ_RECEIPT_TO = 'Read-Receipt-To',
  115.             HEADER_RECEIVED = 'Received',
  116.             HEADER_REFERENCES = 'References',
  117.             HEADER_REPLACES = 'Replaces',
  118.             HEADER_REPLY_BY = 'Reply-By',
  119.             HEADER_REPLY_TO = 'Reply-To',
  120.             HEADER_RESENT_BCC = 'Resent-bcc',
  121.             HEADER_RESENT_CC = 'Resent-cc',
  122.             HEADER_RESENT_DATE = 'Resent-Date',
  123.             HEADER_RESENT_FROM = 'Resent-From',
  124.             HEADER_RESENT_MESSAGE_ID = 'Resent-Message-ID',
  125.             HEADER_RESENT_REPLY_TO = 'Resent-Reply-To',
  126.             HEADER_RESENT_SENDER = 'Resent-Sender',
  127.             HEADER_RESENT_SUBJECT = 'Resent-Subject',
  128.             HEADER_RESENT_TO = 'Resent-To',
  129.             HEADER_RETURN_PATH = 'Return-Path',
  130.             HEADER_RETURN_RECEIPT_REQUESTED = 'Return-Receipt-Requested',
  131.             HEADER_RETURN_RECEIPT_TO = 'Return-Receipt-To',
  132.             HEADER_SEE_ALSO = 'See-Also',
  133.             HEADER_SENDER = 'Sender',
  134.             HEADER_SENSITIVITY = 'Sensitivity',
  135.             HEADER_SPEECH_ACT = 'Speech-Act',
  136.             HEADER_STATUS = 'Status',
  137.             HEADER_SUBJECT = 'Subject',
  138.             HEADER_SUMMARY = 'Summary',
  139.             HEADER_SUPERSEDES = 'Supersedes',
  140.             HEADER_TELEFAX = 'Telefax',
  141.             HEADER_TO = 'To',
  142.             HEADER_TRANSLATED_BY = 'Translated-By',
  143.             HEADER_TRANSLATION_OF = 'Translation-Of',
  144.             HEADER_USER_AGENT = 'User-Agent',
  145.             HEADER_X_ABUSE_INFO = 'X-Abuse-Info',
  146.             HEADER_X_ACCEPT_LANGUAGE = 'X-Accept-Language',
  147.             HEADER_X_ADMIN = 'X-Admin',
  148.             HEADER_X_ARTICLE_CREATION_DATE = 'X-Article-Creation-Date',
  149.             HEADER_X_ATTRIBUTION = 'X-Attribution',
  150.             HEADER_X_AUTHENTICATED_IP = 'X-Authenticated-IP',
  151.             HEADER_X_AUTHENTICATED_SENDER = 'X-Authenticated-Sender',
  152.             HEADER_X_AUTHENTICATION_WARNING = 'X-Authentication-Warning',
  153.             HEADER_X_CACHE = 'X-Cache',
  154.             HEADER_X_COMMENTS = 'X-Comments',
  155.             HEADER_X_COMPLAINTS_TO = 'X-Complaints-To',
  156.             HEADER_X_CONFIRM_READING_TO = 'X-Confirm-reading-to',
  157.             HEADER_X_ENVELOPE_FROM = 'X-Envelope-From',
  158.             HEADER_X_ENVELOPE_TO = 'X-Envelope-To',
  159.             HEADER_X_FACE = 'X-Face',
  160.             HEADER_X_FLAGS = 'X-Flags',
  161.             HEADER_X_FOLDER = 'X-Folder',
  162.             HEADER_X_HTTP_PROXY = 'X-Http-Proxy',
  163.             HEADER_X_HTTP_USER_AGENT = 'X-Http-User-Agent',
  164.             HEADER_X_IMAP = 'X-IMAP',
  165.             HEADER_X_LAST_UPDATED = 'X-Last-Updated',
  166.             HEADER_X_LIST_HOST = 'X-List-Host',
  167.             HEADER_X_LISTSERVER = 'X-Listserver',
  168.             HEADER_X_LOOP = 'X-Loop',
  169.             HEADER_X_MAILER = 'X-Mailer',
  170.             HEADER_X_MAILER_INFO = 'X-Mailer-Info',
  171.             HEADER_X_MAILING_LIST = 'X-Mailing-List',
  172.             HEADER_X_MIME_AUTOCONVERTED = 'X-MIME-Autoconverted',
  173.             HEADER_X_MIMEOLE = 'X-MimeOLE',
  174.             HEADER_X_MIMETRACK = 'X-MIMETrack',
  175.             HEADER_X_MSMAIL_PRIORITY = 'X-MSMail-Priority',
  176.             HEADER_X_MYDEJA_INFO = 'X-MyDeja-Info',
  177.             HEADER_X_NEWSREADER = 'X-Newsreader',
  178.             HEADER_X_NNTP_POSTING_HOST = 'X-NNTP-Posting-Host',
  179.             HEADER_X_NO_ARCHIVE = 'X-No-Archive',
  180.             HEADER_X_NOTICE = 'X-Notice',
  181.             HEADER_X_ORIG_MESSAGE_ID = 'X-Orig-Message-ID',
  182.             HEADER_X_ORIGINAL_ENVELOPE_FROM = 'X-Original-Envelope-From',
  183.             HEADER_X_ORIGINAL_NNTP_POSTING_HOST = 'X-Original-NNTP-Posting-Host',
  184.             HEADER_X_ORIGINAL_TRACE = 'X-Original-Trace',
  185.             HEADER_X_ORIGINALARRIVALTIME = 'X-OriginalArrivalTime',
  186.             HEADER_X_ORIGINATING_IP = 'X-Originating-IP',
  187.             HEADER_X_PMFLAGS = 'X-PMFLAGS',
  188.             HEADER_X_POSTED_BY = 'X-Posted-By',
  189.             HEADER_X_POSTING_AGENT = 'X-Posting-Agent',
  190.             HEADER_X_PRIORITY = 'X-Priority',
  191.             HEADER_X_RCPT_TO = 'X-RCPT-TO',
  192.             HEADER_X_REPORT = 'X-Report',
  193.             HEADER_X_REPORT_ABUSE_TO = 'X-Report-Abuse-To',
  194.             HEADER_X_SENDER = 'X-Sender',
  195.             HEADER_X_SERVER_DATE = 'X-Server-Date',
  196.             HEADER_X_TRACE = 'X-Trace',
  197.             HEADER_X_UIDL = 'X-UIDL',
  198.             HEADER_X_UML_SEQUENCE = 'X-UML-Sequence',
  199.             HEADER_X_URI = 'X-URI',
  200.             HEADER_X_URL = 'X-URL',
  201.             HEADER_X_X_SENDER = 'X-X-Sender',
  202.             HEADER_X400_CONTENT_RETURN = 'X400-Content-Return',
  203.             HEADER_XPIDENT = 'XPident',
  204.             HEADER_XREF = 'Xref';
  205.    
  206.     protected $to,
  207.             $subject,
  208.             $message,
  209.             $headers = array();    
  210.     public function __construct($to, $subject, $message) {
  211.         $this->setTo($to);
  212.         $this->setSubject($subject);
  213.         $this->setMessage($message);
  214.         $this->addHeader(self::HEADER_TO, $this->to);
  215.         $this->addHeader(self::HEADER_SUBJECT, $this->subject);
  216.     }
  217.    
  218.     public function addHeader($tag, $value) {
  219.         $oClass = new ReflectionClass(__CLASS__);
  220.         // case fix (because optional headers are allowed
  221.         if(in_array($constant = 'HEADER_' . str_replace('-', '_', strtoupper($tag)), $oClass->getConstants())) $tag = self::$constant;
  222.         // delete final semi-colon
  223.         if(substr($tag, strlen($tag) - 1) == ':')
  224.             $tag = substr($tag, 0, strlen($tag) - 1);
  225.         // save header
  226.         $this->headers[$tag] = $value;
  227.     }
  228.    
  229.     public function send() {
  230.         $headers = $this->headers;
  231.         array_walk($headers, function($val, $key) {return "$key: $val";});
  232.         return mail($this->to, $this->subject, $this->message, implode("\r\n", $headers) . "\r\n");
  233.     }
  234.    
  235.     // Setters
  236.     public function setTo($to) {
  237.         $this->notEmptyString('to', $to);
  238.         $this->to = $to;
  239.     }
  240.    
  241.     public function setSubject($subject) {
  242.         $this->notEmptyString('subject', $subject);
  243.         $this->subject = $subject;
  244.     }
  245.    
  246.     public function setMessage($message) {
  247.         $this->notEmptyString('message', $message);
  248.         $this->message = $message;
  249.     }
  250.    
  251.     protected function notEmptyString($var, $value) {
  252.         if(!is_string($value) or empty($value)) {
  253.             $msg = __CLASS__ . "::\$$var : Not Empty String excepted";
  254.             throw new InvalidArgumentException($msg);
  255.         }
  256.     }
  257.    
  258. }
  259.  
  260. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement