phpinfo() връща това:
SMTP = localhost
smtp_port = 25
sendmail_from = no value
sendmail_path = /usr/sbin/sendmail -t -i
Конзолата показва това:
profruit@prodesktop:~$ echo $PATH
test.php е PHP скрипт за изпращане на e-mail и команда ls -la връща това:
-rw-r--r-- 1 profruit profruit 2358 2012-01-06 20:17 test.php
-----------------------
$to - до кого е писмото
$subject - заглавие на писмото. Никакви \n или \r в тази част, филтрация в формата на същите!
$message - съдържание на писмото. Редовете трябва да се разделят в Unix-стил (LF).
headers - опционални заглавки
функцията връща true при успех или false
-----------------------
масов е-мейл, който може да се спамира от всеки един
-----------------------
Oт кого е писмото
форматирането допуска и такова представление. Възможен проблем на Windows машина. Съвет - опитай.
експериментално \r\n, ако няма проблем само \n;
Без тази заглавка писмата идват подписани от www-data (Това е Apache, важи за Debian системи).
-----------------------
В случай, че искаш препратка от получателя на друг твой адрес, то преправи $from.
Указва още да препраща на уеб-мастера, а не на пощенския робот.
-----------------------
Карбон копие. Копие до кого. Позволява HTML-формат.
//$headers .= "Cc: {$to}\n";
Скрито (сляпо карбон) копие до кого. Работи като Cc.
//$headers .= "Bcc: {$to}\n";
-----------------------
Какво го праща?
Заглавка с Х в началото указва, че са собствени, добавени от уеб-мастера
-----------------------
MIME версия. Препоръчително да се указва.
-----------------------
Тип съдържание:
text/plain - обикновен текст и е по подразбиране.
text/html - писмото съдържа html тагове
-----------------------
Кога е изпратено писмото.
-----------------------
Urgent message! Важност на съобщението (3 по подразбиране)
-----------------------
Важно.
Последния $headers не съдържа "\n", защото се прибавя от PHP. Свършва секция head и започва body на писмото.
В PHP има зададена константа PHP_EOL (string) и PHP.net по въпроса пише така:
The correct 'End Of Line' symbol for this platform. Available since PHP 4.3.10 and PHP 5.0.2
Ако не сте наясно на какъв сървър ще бъде вдигнат php скрипта ползвайте PHP_EOL. PHP определя системата и съответно слага \r\n за dos & windows или \n за *nix сървър.
Препоръчително да се работи с \r\n според http протокола.
На помощ RFC 2822.
-----------------------
система: Ubuntu 10.04
име: prodesktop
MTA агент: Exim 4
SMTP сървър: Google
PHP функция: mail()
<?php //header('Content-Type:text/html; charset=UTF-8'); $to = "Profruit <somebody@domain.com>"; $subject = "Е-мейл тест от локалхост"; $message = "Това е тест"; //$message = wordwrap($message,70); $from = "James Bond <nobody@domain.com>"; $headers = "From: {$from}\n"; $headers .= "Reply-To: {$from}\n"; $headers .= "Return-Path: {$from}\n"; $headers .= "Cc: {$to}\n"; $headers .= "Bcc: {$to}\n"; $headers .= "X-Mailer: PHP/".phpversion()."\n"; $headers .= "MIME-Version: 1.0\n"; $headers .= "Content-Type: text/plain; charset=utf-8\n"; $headers .= "Date: " . date('r', time()) . "\n"; //strftime("%T", time()) $headers .= "X-Priority: 1"; $success = mail($to, $subject, $message, $headers); echo $success ? 'писмото изпратено' : 'грешка!';
Писмото изпратено успешно.
Детайли на заглавките:
Return-Path: <рrоfruit@gmail.com>
Delivered-To: profruit@domain.bg
Received: from mail-ey0-f180.google.com (mail-ey0-f180.google.com [209.85.215.180]) by pmx.abv.bg (Postfix) with ESMTP id 94FA118FA34 for
Received: by eaac11 with SMTP id c11so1311057eaa.25 for
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=date:message-id:to:subject:x-php-originating-script:from:reply-to :cc:x-mailer:mime-version:content-type:x-priority; bh=oSq5bRi/ujGh8xp0oWkf8au+BjmEnpiHhcFjACqHBFM=; b=F91FmiM4xLulgqiM4KBTCNKOfv/25sDINJA0G7931wEiA9khCxfz5YM1MoFgdGPSyI GrqQ5YM8y/8d7C4I/0hGBYAyWGcsERNQQ7PXraMHWyw1iOI2bdHpe84K0jh6tEG3UGsz 50K1EfWQXeXnFu8j4L2/JWWh3WY6tOmgEz2q0=
Received: by 10.213.19.203 with SMTP id c11mr225648ebb.96.1325931211376; Sat, 07 Jan 2012 02:13:31 -0800 (PST)
Received: from prodesktop (IGLD-84-229-191-146.inter.net.il. [84.229.191.146]) by mx.google.com with ESMTPS id a60sm259955587eeb.4.2012.01.07.02.13.27 (version=TLSv1/SSLv3 cipher=OTHER); Sat, 07 Jan 2012 02:13:30 -0800 (PST)
Received: from www-data by prodesktop with local (Exim 4.71) (envelope-from
Date: Sat, 07 Jan 2012 12:13:25 +0200
Message-Id:
To: Profruit
Subject: Е-мейл тест от локалхост
X-PHP-Originating-Script: 1000:test.php
From: =?UTF-8?B?0JrQvtC60L4=?= <рrоfruit@gmail.com>
Reply-To: Коко
Cc: Profruit
X-Mailer: PHP/5.3.2-1ubuntu4.11
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8Date: Sat, 07 Jan 2012 12:13:24 +0200
X-Priority: 1
По този начин се узнава:
кой е smpt;
името на машината на изпращача;
името на интернет-провайдъра на машината;
IP-то на машината;
версия ОС-ма;
версия MTA;
версия PHP;
името на PHP скрипта;
час, дата и зона.
Чете се адреса до кого е изпратено копие от Сс заглавката. Същото важи и за Bcc.
По-добре без Cc и Bcc, защото са потенциал за мейл-инжекция.
-----------------------
Mass e-mail
Регистрацията на потребители става в таблица users. Извличат се всички адреси. Цикъл while() последователно обхожда адресите и праща писмо с едно и също съдържание до всеки потребител.
$sql = 'SELECT `users`.`email` FROM `db_name`.`users`'; $sql .= ' ORDER BY `user_id` ASC'; $result = mysql_query($sql); while($row = mysql_fetch_assoc($result)) { $to = $row['email']; if(mail($to, $subject, $message, $headers)) {echo "<p>Писмото изпратено до $to</p><br />";} else {echo '<p>Неуспешно до $to!</p>';} }
до нови срещи ^.^
0 Response to "Функция mail()"
Публикуване на коментар