Profruit banner

Умен звънец в openHAB

16 декември 2023

Телефонът е винаги с мен и сега, където и да се намирам получавам известие от openHAB, че някой е позвънил и чака пред вратата. А ако ме няма вкъщи става ясно часа и датата на последното позвъняване.

Tasmota Multipress

30 септември 2023

Идеята е Sonoff Touch T1 US 2 в салона, да управлява освен своето осветление и това в кухнята, а още вентилатора.

DIY 12V 1A WiFi Router UPS

22 април 2023

При поредно прекъсване на захранването вкъщи, батерията на нoтбука и двата UPS автоматично превключват на аварийно захранване и едновременно полита съобщение за конфуза

Zigbee2MQTT клониране

21 януари 2023

... как да клонираме съществуваща настройка на Zigbee2MQTT без да се налага последвало интервю на zigbee-устройствата.

LD2410 - бюджетен датчик присъствие в openHAB

11 февруари 2023

Цената на HLK-LD2410 зададе име на поредната тема в моя блог. С негова помощ се постига "народен" датчик присъствие в домашната автоматизация. . ...

mailer
phpinfo() връща това:

SMTP = localhost
smtp_port = 25
sendmail_from = no value
sendmail_path = /usr/sbin/sendmail -t -i

Конзолата показва това:

profruit@prodesktop:~$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
profruit@prodesktop:~$ which sendmail
/usr/sbin/sendmail


test.php е PHP скрипт за изпращане на e-mail и команда ls -la връща това:
-rw-r--r-- 1 profruit profruit 2358 2012-01-06 20:17 test.php

-----------------------

Функция за изпращане на e-mail в PHP
mail — Send mail

mail ($to , $subject , $message [, $additional_headers [, string $additional_parameters ]] )

$to - до кого е писмото
$subject - заглавие на писмото. Никакви \n или \r в тази част, филтрация в формата на същите!
$message - съдържание на писмото. Редовете трябва да се разделят в Unix-стил (LF).
headers - опционални заглавки

функцията връща true при успех или false

-----------------------

$to = "somebody@abv.bg";
за един получател

$to = "somebody@abv.bg, nobody@abv.bg";
Получател: somebody@abv.bg, nobody@abv.bg
масов е-мейл, който може да се спамира от всеки един

-----------------------

Заглавки

Oт кого е писмото
$from = "you@example.com";

форматирането допуска и такова представление. Възможен проблем на Windows машина. Съвет - опитай.
$from = "James Bond <you@example.com>";

$headers = "From: {$from}\n";

експериментално \r\n, ако няма проблем само \n;
Без тази заглавка писмата идват подписани от www-data (Това е Apache, важи за Debian системи).

-----------------------

В случай, че искаш препратка от получателя на друг твой адрес, то преправи $from.
Указва още да препраща на уеб-мастера, а не на пощенския робот.
$headers .= "Reply-To:{$from}\n";

-----------------------

Карбон копие. Копие до кого. Позволява HTML-формат.
//$headers .= "Cc: {$to}\n";

Скрито (сляпо карбон) копие до кого. Работи като Cc.
//$headers .= "Bcc: {$to}\n";

-----------------------

Какво го праща?
Заглавка с Х в началото указва, че са собствени, добавени от уеб-мастера
$headers .= 'X-Mailer: PHP/'.phpversion()."\n"

-----------------------

MIME версия. Препоръчително да се указва.
$headers .= "MIME-Version: 1.0\n";

-----------------------

Тип съдържание:
text/plain - обикновен текст и е по подразбиране.
text/html - писмото съдържа html тагове

$headers .= "Content-Type: text/plain; charset=utf-8";

-----------------------

Кога е изпратено писмото.
$headers .= "Date: " . date('r', time()) . "\n";

-----------------------

Urgent message! Важност на съобщението (3 по подразбиране)
$headers .= "X-Priority: 1\n";

-----------------------

Важно.
Последния $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.

-----------------------

Пример за изпращане на прост e-mail

система: 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 ? 'писмото изпратено' : 'грешка!';

Писмото изпратено успешно.

писмо

заб. Koko e James Bond. Разни шапшали ми пращат спам и промених текущите имена.

Детайли на заглавките:

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 ; Sat, 7 Jan 2012 12:13:31 +0200 (EET)
Received: by eaac11 with SMTP id c11so1311057eaa.25 for ; Sat, 07 Jan 2012 02:13:31 -0800 (PST)
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 ) id 1RjTHB-0000uW-3R; Sat, 07 Jan 2012 12:13:25 +0200
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 table
 $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>';}
    }






до нови срещи   ^.^

07.01.2012 profruit 

|

0 Response to "Функция mail()"

Публикуване на коментар

Този блог е реинкарнация на първите ми опити за споделяне в нета. На времето започнах с къси разкази на преживяното. После се обезсмисли и превърнах блога си в системно радио. Пиша единствено неща, които карат душата ми да живее: openHAB, Ubuntu, Споделено и т.н. Това е моето системно радио, разбирате ли? Моята вълна и вие сте на нея сега.

Архив на блога