Изпращане на поща със средствата на PHP. Част 2

В дадения раздел се описва, как да изпратим HTML-файл с внедрени (за разлика от прикрепените) изображения, използувайки класа Mime_mail. Предполага се, че предишният раздел Вие вече сте го прочели.


3. Как да изпратим писмо c картинки
Изпращане на писмо с вложение и изпращане на HTML-писмо с вложение съществено се различават по своята природа. Разбира се, и едните и другите се намират в тялото на писмото, закодирани са в base64, но използуваните в двата случая заглавни части се различават.



Разликата от приведения в предишната глава - използване на функцията addHTMLImage е че тя приема следните параметри:

string $data
пълният път до прикрепяното изображение на сървъра или неговото съдържание. Задължителен параметър.

string $c_type
значението на заглавната част Сontent-type, която ще бъде озпратена. Незадължителен параметър, стойност по подразбиране: application/octet-stream.

string $name
име на прикрепяното изображение. Ще бъде използвано само в случай, ако първият параметър ($data) се явява съдържимо на файла.

boolean $isfile
определя, дали първият параметър е пътя до изображението. Незадължителен параметър, стойност по подразбиране: true.

Аналогично на метода addAttachment съществуват два способа за извикване на този метод: в качеството на първи параметър може да се указва пътя до изображението или двоичните данни на изображението. Във вторият случай трети и четвърти параметри са задължителни.

Особеността на този метод се заключава в това, че на всяко изображение с помоща на заглавната част Content-ID: <8820c4185> се поставя в съответствие уникален ключ. По този начин всички препратки към прикрепяното изображение се заменят с препратки към неговият ключ. В резултат-ред във вида който пощенския клиент анализира, и извлича съдържанието от съответната секция на писмото и "показва картинката".

4. Алтернативни способи за изпращане на писма
Разпространени са следните способи за изпращане на писма чрез php-скриптове:

Посредством извикване на функцията mail
Непосредствено с извикване на sendmail-а
С помоща на сокети
Исползувайки COM-обект
Първите три способа са реализирани в класа PEAR::Mail, за който беше споменато по-нагоре. Екземпляра на този клас трябва да се създаде посредством статично извикване на метода factory (така нареченият "pattern factory"). Първият параметър на метода определя способа за изпращане на писмо и може да приема едно от следните значения: mail, sendmail, smtp. Вторият параметър - масив, съдържанието на който зависи от значението на първият параметър:
Значение 'mail' - изпращане с помоща на извикване на стандартна функция; допълнителни параметри отсъстствуват
Значение 'sendmail' - изпращане, непосредствено с извикване на sendmail-а. Достъпни допълнителни параметри:
sendmail_path - път към програмата на сървъра;
sendmail_args - допълнителни параметри за командни редове.
Значение 'smtp' - изпращане на поща с помоща на сокети. Достъпни допълнителни параметри:
host - IP адрес или домейна на сървъра, на който е пуснат пощенският транспортен агент, готов да приеме пощата.
port - порта на който е пуснат (като правило 25-ти);
auth - логическо значение, което указва за необходимостта от SMTP авторизация, стойност по подразбиране - false;
username - използува се само при наличие на SMTP авторизация - логин на сървъра;
password - използува се само при наличие на SMTP авторизация - парола на сървъра.
Пример за използуване на класа PEAR::Mail :






5. Как да настроим сървъра

5.1 Как да настроим Linux-сървър
Ако четете този раздел, може би сте решили да изпратите поща посредством транспортния пощенски агент (MTA), установен на Вашия сървър, и евентуално сте се сблъскали с проблеми.

Изпращането на поща с помоща на сокети не изисква установен MTA, а позволява да се използва който и да е достъпен за вас сървър, готов да приема поща, например, mxs.mail.ru.

Ако на екрана Ви се е появила грешката "Fatal error: Call to undefined function: mail()", това значи, че или PHP е версия без подръжка на функцията mail, или тя е забранена при настройката на сървъра. Първият случай може да възникне, ако по време на работа скрипта configure не може да открие sendmail. Убедете се, че пътя към sendmail е изписан в окръжението променливи на PATH. Така също вижте значението на променливата disable_functions във файла php.ini.

В случай, че писмото е прието за изпращане, но с това всичко приключва, убедете се, че е активиран Sendmail (или който и да е друг MTA). Изпробвайте да изпълните `telnet localhost 25` и ако в отговор получавате "telnet: connect to address 127.0.0.1: Connection refused" вместо очакваното " Connected to localhost.", това означава, че при вас има проблем с MTA.

В случай, че обръщението към 25-ти порт е протекло успешно, опитайте да проведете следният сеанс:

l72:~ # telnet localhost 25
Trying ::1...
telnet: connect to address ::1: Connection refused
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 utel.us ESMTP Sendmail /8.12.7/Linux 0.6; Wed, 22 Oct 2003 16:10:45 +0300
helo localhost
250 72.utel.us Hello localhost [127.0.0.1], pleased to meet you
mail from: nobody@localhost
250 2.1.0 nobody@localhost... Sender ok
rcpt to: nobody@localhost
250 2.1.5 nobody@localhost... Recipient ok
DATA
354 Enter mail, end with "." on a line by itself
Helo world
.
250 2.0.0 h9MDAj1B009029 Message accepted for delivery
quit
Connection closed by foreign host.


Приведеният пример демонстрира успешен сеанс по изпращане на писмо. В случай на възникване на грешки (например, изисква се коректен адрес на изпращача в реда "mail from"), sendmail извежда предупреждение, и моли за повторно въвеждане на реда.

Ако с командни редове писмото успешно се изпраща, а с помоща на php не, поекспериментирайте с четвъртия параметър на функциа mail или с настройка на sendmail_path, намиращ се във файла php.ini

5.2 Как да настроим Windows-сървър
В началото е необходимо да определите, какъв SMTP-сървър желаете да използвате. Това може да е както вашият персонален PC, така и всеки друг. Необходимо е да установите променливата в SMTP, smtp_port, определяща настройката на сървъра, изпращащ пощата. Така също да установите променливата sendmail_from, определяща обратният адрес на изпращача.

По-нататъшните инструкции се отнасят само за тези, решили да използват своя персонален PC като сървър за изходящата поща.

Проверете, отговаря ли някой на 25-ти порт. Това може да се направи с изпълнение на `telnet localhost 25`. Ако получавате "Connection refused", това означава, че пощенският Ви агент не е пуснат и най-вероятно, не е установен. В такъв случай Ви е необходимо да посетите един от следните ресурси:

http://www.argosoft.com/applications/mailserver/
http://courierms.narod.ru/
http://www.indigostar.com/sendmail.htm
Изберете програма, отговаряща на вашите потребности и следвайте инструкциите по нейната настройка и употреба.

Като пример, предлагаме инструкция по настройка на такъв:

Инсталиране на ArGoSoft Mail Server
Стартиране на приложението и избиране на Tools > Options
Избор на DNS сървър или предоставяне на възможността да бъде определен автоматично
В полето "IP Homes" въведете 127.0.0.1
Стартиране на сървиса ArGoSoft Mail Server и проверка, дали не се появява съобщение за грешки
Във файла php.ini укажете SMTP = localhost
статията продължава в трета част



/ Трябва да сте регистриран за да напишете коментар /
От: kickme
22:47 15-10-2010
да ти ги сложи на картинки, и че е много полезен урока
1