Webmaster общности: Predpriemach.com | SearchEngines.bg

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

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

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

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

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

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

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

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

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

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

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

    Алтернативни способи за изпращане на писма
    Разпространени са следните способи за изпращане на писма чрез 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 :

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

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

    Как да настроим 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

    Как да настроим 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
    статията продължава в трета част