· 8 years ago · Mar 10, 2017, 07:22 AM
1#!/usr/bin/php
2<?php
3$stream = '';
4$fp = fopen('php://stdin','r');
5
6while($t=fread($fp,2048))
7{
8 if( $t===chr(0) )
9 break;
10 $stream .= $t;
11}
12//$count_mails - количеÑтво пиÑем Ñ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð½Ð¾Ð³Ð¾ домена.
13if($count_mails > 50){
14 exit(0);
15}
16//вот здеÑÑŒ должно быть что-то что отправит пиÑьма дальше поÑле вÑех изыÑканий.
17
18// $mailSMTP = new SendMailSmtpClass('логин', 'пароль', 'хоÑÑ‚', 'Ð¸Ð¼Ñ Ð¾Ñ‚Ð¿Ñ€Ð°Ð²Ð¸Ñ‚ÐµÐ»Ñ');
19// $result = $mailSMTP->send('Кому пиÑьмо', 'Тема пиÑьма', 'ТекÑÑ‚ пиÑьма', 'Заголовки пиÑьма');
20
21<?php
22/**
23* SendMailSmtpClass
24*
25* КлаÑÑ Ð´Ð»Ñ Ð¾Ñ‚Ð¿Ñ€Ð°Ð²ÐºÐ¸ пиÑем через SMTP Ñ Ð°Ð²Ñ‚Ð¾Ñ€Ð¸Ð·Ð°Ñ†Ð¸ÐµÐ¹
26* Может работать через SSL протокол
27* ТеÑтировалоÑÑŒ на почтовых Ñерверах yandex.ru, mail.ru и gmail.com
28*
29* @author Ipatov Evgeniy <admin@ipatov-soft.ru>
30* @version 1.0
31*/
32class SendMailSmtpClass {
33
34 /**
35 *
36 * @var string $smtp_username - логин
37 * @var string $smtp_password - пароль
38 * @var string $smtp_host - хоÑÑ‚
39 * @var string $smtp_from - от кого
40 * @var integer $smtp_port - порт
41 * @var string $smtp_charset - кодировка
42 *
43 */
44 public $smtp_username;
45 public $smtp_password;
46 public $smtp_host;
47 public $smtp_from;
48 public $smtp_port;
49 public $smtp_charset;
50
51 public function __construct($smtp_username, $smtp_password, $smtp_host, $smtp_from, $smtp_port = 25, $smtp_charset = "utf-8") {
52 $this->smtp_username = $smtp_username;
53 $this->smtp_password = $smtp_password;
54 $this->smtp_host = $smtp_host;
55 $this->smtp_from = $smtp_from;
56 $this->smtp_port = $smtp_port;
57 $this->smtp_charset = $smtp_charset;
58 }
59
60 /**
61 * Отправка пиÑьма
62 *
63 * @param string $mailTo - получатель пиÑьма
64 * @param string $subject - тема пиÑьма
65 * @param string $message - тело пиÑьма
66 * @param string $headers - заголовки пиÑьма
67 *
68 * @return bool|string Ð’ Ñлучаи отправки вернет true, иначе текÑÑ‚ ошибки *
69 */
70 function send($mailTo, $subject, $message, $headers) {
71 $contentMail = "Date: " . date("D, d M Y H:i:s") . " UTrn";
72 $contentMail .= 'Subject: =?' . $this->smtp_charset . '?B?' . base64_encode($subject) . "=?=rn";
73 $contentMail .= $headers . "rn";
74 $contentMail .= $message . "rn";
75
76 try {
77 if(!$socket = @fsockopen($this->smtp_host, $this->smtp_port, $errorNumber, $errorDescription, 30)){
78 throw new Exception($errorNumber.".".$errorDescription);
79 }
80 if (!$this->_parseServer($socket, "220")){
81 throw new Exception('Connection error');
82 }
83
84 $server_name ='test' /*$_SERVER["SERVER_NAME"]*/;
85 fputs($socket, "HELO $server_namern");
86 if (!$this->_parseServer($socket, "250")) {
87 fclose($socket);
88 throw new Exception('Error of command sending: HELO');
89 }
90
91 fputs($socket, "AUTH LOGINrn");
92 if (!$this->_parseServer($socket, "334")) {
93 fclose($socket);
94 throw new Exception('Autorization error');
95 }
96
97
98
99 fputs($socket, base64_encode($this->smtp_username) . "rn");
100 if (!$this->_parseServer($socket, "334")) {
101 fclose($socket);
102 throw new Exception('Autorization error');
103 }
104
105 fputs($socket, base64_encode($this->smtp_password) . "rn");
106 if (!$this->_parseServer($socket, "235")) {
107 fclose($socket);
108 throw new Exception('Autorization error');
109 }
110
111 fputs($socket, "MAIL FROM: <".$this->smtp_username.">rn");
112 if (!$this->_parseServer($socket, "250")) {
113 fclose($socket);
114 throw new Exception('Error of command sending: MAIL FROM');
115 }
116
117 $mailTo = ltrim($mailTo, '<');
118 $mailTo = rtrim($mailTo, '>');
119 fputs($socket, "RCPT TO: <" . $mailTo . ">rn");
120 if (!$this->_parseServer($socket, "250")) {
121 fclose($socket);
122 throw new Exception('Error of command sending: RCPT TO');
123 }
124
125 fputs($socket, "DATArn");
126 if (!$this->_parseServer($socket, "354")) {
127 fclose($socket);
128 throw new Exception('Error of command sending: DATA');
129 }
130
131 fputs($socket, $contentMail."rn.rn");
132 if (!$this->_parseServer($socket, "250")) {
133 fclose($socket);
134 throw new Exception("E-mail didn't sent");
135 }
136
137 fputs($socket, "QUITrn");
138 fclose($socket);
139 } catch (Exception $e) {
140 return $e->getMessage();
141 }
142 return true;
143 }
144
145 private function _parseServer($socket, $response) {
146 while (@substr($responseServer, 3, 1) != ' ') {
147 if (!($responseServer = fgets($socket, 256))) {
148 return false;
149 }
150 }
151 if (!(substr($responseServer, 0, 3) == $response)) {
152 return false;
153 }
154 return true;
155
156 }
157}