Меню

Php mail ошибки отправки

(PHP 4, PHP 5, PHP 7, PHP 8)

mailSend mail

Description

mail(
    string $to,
    string $subject,
    string $message,
    array|string $additional_headers = [],
    string $additional_params = «»
): bool

Parameters

to

Receiver, or receivers of the mail.

The formatting of this string must comply with
» RFC 2822. Some examples are:

  • user@example.com
  • user@example.com, anotheruser@example.com
  • User <user@example.com>
  • User <user@example.com>, Another User <anotheruser@example.com>
subject

Subject of the email to be sent.

message

Message to be sent.

Each line should be separated with a CRLF (rn). Lines should not be
larger than 70 characters.

Caution

(Windows only) When PHP is talking to a SMTP server directly, if a full
stop is found on the start of a line, it is removed. To counter-act this,
replace these occurrences with a double dot.


<?php
$text
= str_replace("n.", "n..", $text);
?>

additional_headers (optional)

String or array to be inserted at the end of the email header.

This is typically used to add extra headers (From, Cc, and Bcc).
Multiple extra headers should be separated with a CRLF (rn).
If outside data are used to compose this header, the data should be sanitized
so that no unwanted headers could be injected.

If an array is passed, its keys are the header names and its
values are the respective header values.

Note:

Before PHP 5.4.42 and 5.5.27, repectively, additional_headers did not have mail header
injection protection. Therefore, users must make sure specified headers
are safe and contains headers only. i.e. Never start mail body by putting
multiple newlines.

Note:

When sending mail, the mail must contain
a From header. This can be set with the
additional_headers parameter, or a default
can be set in php.ini.

Failing to do this will result in an error
message similar to Warning: mail(): "sendmail_from" not
set in php.ini or custom "From:" header missing
.
The From header sets also
Return-Path when sending directly via SMTP (Windows only).

Note:

If messages are not received, try using a LF (n) only.
Some Unix mail transfer agents (most notably
» qmail) replace LF by CRLF
automatically (which leads to doubling CR if CRLF is used).
This should be a last resort, as it does not comply with
» RFC 2822.

additional_params (optional)

The additional_params parameter
can be used to pass additional flags as command line options to the
program configured to be used when sending mail, as defined by the
sendmail_path configuration setting. For example,
this can be used to set the envelope sender address when using
sendmail with the -f sendmail option.

This parameter is escaped by escapeshellcmd() internally
to prevent command execution. escapeshellcmd() prevents
command execution, but allows to add additional parameters. For security reasons,
it is recommended for the user to sanitize this parameter to avoid adding unwanted
parameters to the shell command.

Since escapeshellcmd() is applied automatically, some characters
that are allowed as email addresses by internet RFCs cannot be used.
mail() can not allow such characters, so in programs where the use of
such characters is required, alternative means of sending emails (such as using a framework
or a library) is recommended.

The user that the webserver runs as should be added as a trusted user to the
sendmail configuration to prevent a ‘X-Warning’ header from being added
to the message when the envelope sender (-f) is set using this method.
For sendmail users, this file is /etc/mail/trusted-users.

Return Values

Returns true if the mail was successfully accepted for delivery, false otherwise.

It is important to note that just because the mail was accepted for delivery,
it does NOT mean the mail will actually reach the intended destination.

Changelog

Version Description
7.2.0 The additional_headers parameter now also accepts
an array.

Examples

Example #1 Sending mail.

Using mail() to send a simple email:


<?php
// The message
$message = "Line 1rnLine 2rnLine 3";// In case any of our lines are larger than 70 characters, we should use wordwrap()
$message = wordwrap($message, 70, "rn");// Send
mail('caffeinated@example.com', 'My Subject', $message);
?>

Example #2 Sending mail with extra headers.

The addition of basic headers, telling the MUA
the From and Reply-To addresses:


<?php
$to
= 'nobody@example.com';
$subject = 'the subject';
$message = 'hello';
$headers = 'From: webmaster@example.com' . "rn" .
'Reply-To: webmaster@example.com' . "rn" .
'X-Mailer: PHP/' . phpversion();mail($to, $subject, $message, $headers);
?>

Example #3 Sending mail with extra headers as array

This example sends the same mail as the example immediately above, but
passes the additional headers as array (available as of PHP 7.2.0).


<?php
$to
= 'nobody@example.com';
$subject = 'the subject';
$message = 'hello';
$headers = array(
'From' => 'webmaster@example.com',
'Reply-To' => 'webmaster@example.com',
'X-Mailer' => 'PHP/' . phpversion()
);
mail($to, $subject, $message, $headers);
?>

Example #4 Sending mail with an additional command line parameter.

The additional_params parameter
can be used to pass an additional parameter to the program configured
to use when sending mail using the sendmail_path.


<?php
mail
('nobody@example.com', 'the subject', 'the message', null,
'-fwebmaster@example.com');
?>

Example #5 Sending HTML email

It is also possible to send HTML email with mail().


<?php
// Multiple recipients
$to = 'johny@example.com, sally@example.com'; // note the comma

// Subject

$subject = 'Birthday Reminders for August';// Message
$message = '
<html>
<head>
<title>Birthday Reminders for August</title>
</head>
<body>
<p>Here are the birthdays upcoming in August!</p>
<table>
<tr>
<th>Person</th><th>Day</th><th>Month</th><th>Year</th>
</tr>
<tr>
<td>Johny</td><td>10th</td><td>August</td><td>1970</td>
</tr>
<tr>
<td>Sally</td><td>17th</td><td>August</td><td>1973</td>
</tr>
</table>
</body>
</html>
'
;// To send HTML mail, the Content-type header must be set
$headers[] = 'MIME-Version: 1.0';
$headers[] = 'Content-type: text/html; charset=iso-8859-1';// Additional headers
$headers[] = 'To: Mary <mary@example.com>, Kelly <kelly@example.com>';
$headers[] = 'From: Birthday Reminder <birthday@example.com>';
$headers[] = 'Cc: birthdayarchive@example.com';
$headers[] = 'Bcc: birthdaycheck@example.com';// Mail it
mail($to, $subject, $message, implode("rn", $headers));
?>

Note:

If intending to send HTML or otherwise Complex mails, it is recommended
to use the PEAR package » PEAR::Mail_Mime.

Notes

Note:

The SMTP implementation (Windows only) of mail() differs in many
ways from the sendmail implementation. First, it doesn’t use a local binary
for composing messages but only operates on direct sockets which means a
MTA is needed listening on a network socket (which
can either on the localhost or a remote machine).

Second, the custom headers like
From:,
Cc:,
Bcc: and
Date: are
not interpreted by the
MTA in the first place, but are parsed by PHP.

As such, the to parameter should not be an address
in the form of «Something <someone@example.com>». The
mail command may not parse this properly while talking with
the MTA.

Note:

It is worth noting that the mail() function is not
suitable for larger volumes of email in a loop. This function opens
and closes an SMTP socket for each email, which is not very efficient.

For the sending of large amounts of email, see the
» PEAR::Mail, and
» PEAR::Mail_Queue packages.

Note:

The following RFCs may be useful:
» RFC 1896,
» RFC 2045,
» RFC 2046,
» RFC 2047,
» RFC 2048,
» RFC 2049, and
» RFC 2822.

See Also

  • mb_send_mail() — Send encoded mail
  • imap_mail() — Send an email message
  • » PEAR::Mail
  • » PEAR::Mail_Mime

Anonymous

3 years ago


If you notice wrong displayed characters in the email it's because you need to properly set the Content-Type and the Charset in the headers of the email:

<?php
$headers
= 'Content-Type: text/plain; charset=utf-8' . "rn";
?>

Mostly, UTF-8 is your best choice.

You can set custom headers with the fourth parameter of the mail() function.

To make the whole thing waterproof, add the following header too:

<?php
$headers
.= 'Content-Transfer-Encoding: base64' . "rn";
?>

Now you can use the combination of UTF-8 and Base64 to properly encode the subject line and the recipient name like this:

<?php
$subject
= '=?UTF-8?B?' . base64_encode('Test email with German Umlauts öäüß') . '?=';
$recipient = '=?UTF-8?B?' . base64_encode('Margret Müller') . '?= <recipient@domain.com>';
?>

And don't forget to Base64 encode the email message too:

<?php
$message
= base64_encode('This email contains German Umlauts öäüß.');
?>

All references are taken from:
https://dev.to/lutvit/how-to-make-the-php-mail-function-awesome-3cii


php at simoneast dot net

5 years ago


Often it's helpful to find the exact error message that is triggered by the mail() function. While the function doesn't provide an error directly, you can use error_get_last() when mail() returns false.

<?php
$success
= mail('example@example.com', 'My Subject', $message);
if (!
$success) {
   
$errorMessage = error_get_last()['message'];
}
?>

(Tested successfully on Windows which uses SMTP by default, but sendmail on Linux/OSX may not provide the same level of detail.)

Thanks to https://stackoverflow.com/a/20203870/195835


Anonymous

6 years ago


Security advice: Although it is not documented, for the parameters $to and $subject the mail() function changes at least r and n to space. So these parameters are safe against injection of additional headers. But you might want to check $to for commas as these separate multiple addresses and you might not want to send to more than one recipient.

The crucial part is the $additional_headers parameter. This parameter can't be cleaned by the mail() function. So it is up to you to prevent unwanted r or n to be inserted into the values you put in there. Otherwise you just created a potential spam distributor.


charles dot fisher at arconic dot com

5 years ago


I migrated an application to a platform without a local transport agent (MTA). I did not want to configure an MTA, so I wrote this xxmail function to replace mail() with calls to a remote SMTP server. Hopefully it is of some use.

function xxmail($to, $subject, $body, $headers)
{
$smtp = stream_socket_client('tcp://smtp.yourmail.com:25', $eno, $estr, 30);

$B = 8192;
$c = "rn";
$s = 'myapp@someserver.com';

fwrite($smtp, 'helo ' . $_ENV['HOSTNAME'] . $c);
  $junk = fgets($smtp, $B);

// Envelope
fwrite($smtp, 'mail from: ' . $s . $c);
  $junk = fgets($smtp, $B);
fwrite($smtp, 'rcpt to: ' . $to . $c);
  $junk = fgets($smtp, $B);
fwrite($smtp, 'data' . $c);
  $junk = fgets($smtp, $B);

// Header
fwrite($smtp, 'To: ' . $to . $c);
if(strlen($subject)) fwrite($smtp, 'Subject: ' . $subject . $c);
if(strlen($headers)) fwrite($smtp, $headers); // Must be rn (delimited)
fwrite($smtp, $headers . $c);

// Body
if(strlen($body)) fwrite($smtp, $body . $c);
fwrite($smtp, $c . '.' . $c);
  $junk = fgets($smtp, $B);

// Close
fwrite($smtp, 'quit' . $c);
  $junk = fgets($smtp, $B);
fclose($smtp);
}


pangz dot lab at gmail dot com

2 years ago


* Sending email with attachment

function sendMail(
    string $fileAttachment,
    string $mailMessage = MAIL_CONF["mailMessage"],
    string $subject     = MAIL_CONF["subject"],
    string $toAddress   = MAIL_CONF["toAddress"],
    string $fromMail    = MAIL_CONF["fromMail"]
): bool {

        $fileAttachment = trim($fileAttachment);
    $from           = $fromMail;
    $pathInfo       = pathinfo($fileAttachment);
    $attchmentName  = "attachment_".date("YmdHms").(
    (isset($pathInfo['extension']))? ".".$pathInfo['extension'] : ""
    );

        $attachment    = chunk_split(base64_encode(file_get_contents($fileAttachment)));
    $boundary      = "PHP-mixed-".md5(time());
    $boundWithPre  = "n--".$boundary;

        $headers   = "From: $from";
    $headers  .= "nReply-To: $from";
    $headers  .= "nContent-Type: multipart/mixed; boundary="".$boundary.""";

        $message   = $boundWithPre;
    $message  .= "n Content-Type: text/plain; charset=UTF-8n";
    $message  .= "n $mailMessage";

        $message .= $boundWithPre;
    $message .= "nContent-Type: application/octet-stream; name="".$attchmentName.""";
    $message .= "nContent-Transfer-Encoding: base64n";
    $message .= "nContent-Disposition: attachmentn";
    $message .= $attachment;
    $message .= $boundWithPre."--";

        return mail($toAddress, $subject, $message, $headers);
}

* Sending email in html

function sendHtmlMail(
    string $mailMessage = MAIL_CONF["mailMessage"],
    string $subject     = MAIL_CONF["subject"],
    array $toAddress    = MAIL_CONF["toAddress"],
    string $fromMail    = MAIL_CONF["fromMail"]
): bool {

        $to        = implode(",", $toAddress);
    $headers[] = 'MIME-Version: 1.0';
    $headers[] = 'Content-type: text/html; charset=iso-8859-1';   
    $headers[] = 'To: '.$to;
    $headers[] = 'From: '.$fromMail;   

    return mail($to, $subject, $mailMessage, implode("rn", $headers));
}


chris at ocproducts dot com

5 years ago


The 'sendmail' executable which PHP uses on Linux/Mac (not Windows) expects "n" as a line separator.

This executable is a standard, and emulated by other MTAs.

"n" is confirmed required for qmail and postfix, probably also for sendmail and exim but I have not tested.

If you pass through using "rn" as a separator it may appear to work, but your email will be subtly corrupted and some middleware may break. It only works because some systems will clean up your mistake.

If you are implementing DKIM be very careful, as DKIM checks will fail (at least on popular validation tools) if you screw this up. DKIM must be calculated using "rn" but then you must switch it all to "n" when using the PHP mail function.

On Windows, however, you should use "rn" because PHP is using SMTP in this situation, and hence the normal rules of the SMTP protocol (not the normal rules of Unix piping) apply.


ABOMB

10 years ago


I was having delivery issues from this function to Gmail, Yahoo, AOL, etc.  I used the notes here to figure that you need to be setting your Return-Path to a valid email to catch bounces.  There are two extra delivery gotchas on top of that:

1) The domain in the email used in the -f option in the php.ini sendmail parameter or in the mail() extra parameters field, needs to have a valid SPF record for the domain (in DNS as a "TXT" record type for sure and add an additional  "SPF" type record if possible).  Why? That's header field being used for spam checks.

2) You should also use a domain key or DKIM.  The trick here is that the domain key/DKIM is case sensitive!  I used Cpanel to create my domain key which automatically used all lowercase domain names in the key creation.  I found when  sending email and using a camel case "-f account@MyDomainHere.Com" option, my key was not accepted.  However it was accepted when I used "-f account@mydomainhere.com".

There are many other factors that can contribute to mail not getting to inboxes, including your own multiple failed testing attempts, so I suggest you consult each site's guidelines and don't ask me for help.  These are just the couple technical issues that helped my case.

I hope this saves someone some time and headaches...


Mark Simon

3 years ago


It is worth noting that you can set up a fake sendmail program using the sendmail_path directive in php.ini.

Despite the comment in that file, sendmail_path also works for Window. From https://www.php.net/manual/en/mail.configuration.php#ini.sendmail-path:

This directive works also under Windows. If set, smtp, smtp_port and sendmail_from are ignored and the specified command is executed.


Porjo

12 years ago


Make sure you enclose rn in double quotes (not single quotes!) so that PHP can translate that into the correct linefeed code

Ben Cooke

17 years ago


Note that there is a big difference between the behavior of this function on Windows systems vs. UNIX systems. On Windows it delivers directly to an SMTP server, while on a UNIX system it uses a local command to hand off to the system's own MTA.

The upshot of all this is that on a Windows system your  message and headers must use the standard line endings rn as prescribed by the email specs. On a UNIX system the MTA's "sendmail" interface assumes that recieved data will use UNIX line endings and will turn any n to rn, so you must supply only n to mail() on a UNIX system to avoid the MTA hypercorrecting to rrn.

If you use plain old n on a Windows system, some MTAs will get a little upset. qmail in particular will refuse outright to accept any message that has a lonely n without an accompanying r.


eeeugeneee

5 years ago


Send mail with minimal requirements from email services.

<?php
    $encoding
= "utf-8";// Preferences for Subject field
   
$subject_preferences = array(
       
"input-charset" => $encoding,
       
"output-charset" => $encoding,
       
"line-length" => 76,
       
"line-break-chars" => "rn"
   
);// Mail header
   
$header = "Content-type: text/html; charset=".$encoding." rn";
   
$header .= "From: ".$from_name." <".$from_mail."> rn";
   
$header .= "MIME-Version: 1.0 rn";
   
$header .= "Content-Transfer-Encoding: 8bit rn";
   
$header .= "Date: ".date("r (T)")." rn";
   
$header .= iconv_mime_encode("Subject", $mail_subject, $subject_preferences);// Send mail
   
mail($mail_to, $mail_subject, $mail_message, $header);
?>


atesin > gmail

3 days ago


mail() internals:

doing some tests i can say... if sendmail_path is defined in php.ini or by ini.set(), by calling function like...

mail($to, $subject, $message, $headers, $params)

would be like if php open a shell internally, execute this command, send this text to stdin, and return true if return value == 0

------------
shell> $sendmail_path $params
To: $to
Subject: $subject
$headers

$message
(EOF)
------------

in windows instead using php smtp which is very limited, i prefer to force use sendmail-like behavior, by setting sendmail_path and then use msmtp for windows


rexlorenzo at gmail dot com

10 years ago


Be careful to not put extra spaces for the $headers variable.

For example, this didn't work on our servers:

$headers = "From: $from rn Bcc: $bcc rn";

But this did:

$headers = "From: $fromrnBcc: $bccrn";

Notice the removal of the spaces around the first rn.


pavel.lint at vk.com

10 years ago


Here's a small handy function I use to send email in UTF-8.

<?php
function mail_utf8($to, $from_user, $from_email,
                                            
$subject = '(No subject)', $message = '')
   {
     
$from_user = "=?UTF-8?B?".base64_encode($from_user)."?=";
     
$subject = "=?UTF-8?B?".base64_encode($subject)."?=";$headers = "From: $from_user <$from_email>rn".
              
"MIME-Version: 1.0" . "rn" .
              
"Content-type: text/html; charset=UTF-8" . "rn";

     return

mail($to, $subject, $message, $headers);
   }
?>


Max AT

10 years ago


To define a mail sensitivity you have to put this line in the headers:

<?php
        $headers
= "MIME-Version: 1.0n" ;
       
$headers .= "Content-Type: text/html; charset="iso-8859-1"n";$headers .= "Sensitivity: Personaln";$status   = mail($to, $subject, $message,$headers);
?>

Possible Options:
Sensitivity: Normal, Personal, Private and Company-Confidential

These will be recognised and handled in Outlook, Thunderbird and others.


andrew at my-syte dot com

2 months ago


Regarding To:

be careful not to duplicate To in the additional_headers,

lest gmail already flags it thus:

host gmail-smtp-in.l.google.com [142.251.xx.xx]
SMTP error from remote mail server after end of data:
550-5.7.1 [xxx.xxx.xx.xx] This message is not RFC 5322 compliant, the issue is:
550-5.7.1 duplicate To headers. To reduce the amount of spam sent to Gmail,
550-5.7.1 this message has been blocked. Please review
550 5.7.1 RFC 5322 specifications for more information.


php dot net at schrecktech dot com

17 years ago


When sending MIME email make sure you follow the documentation with the "70" characters per line...you may end up with missing characters...and that is really hard to track down...

Chese

Guest


  • #1

Отловить в PHP ошибку при отправлении почты(mail)

Функция mail возврашает TRUE или FALSE, а можно ли при FALSE отловить, почему именно не ушло письмо т.е. код ошибки.

  • #2

используй [m]imap_mail[/m]
тексты ошибок — через [m]imap_errors[/m], [m]imap_last_error[/m]

Chese

Guest


  • #3

А если нет imap, его в самом деле нет :)

  • #4

тогда все пропало.
в исходниках нет возврата ошибок — есть либо TRUE, либо FALSE

Код:

        if (php_mail(to, subject, message, headers, extra_cmd TSRMLS_CC)) {
                RETVAL_TRUE;
        } else {
                RETVAL_FALSE;
        }

Chese

Guest


  • #5

Понято, значит будем просто ругаться без объяснения причин.

  • #6

Автор оригинала: Chese
Понято, значит будем просто ругаться без объяснения причин.

Что кстати не корректно:) Но другого выхода нет…

Barlone

Guest


  • #7

Re: Отловить в PHP ошибку при отправлении почты(mail)

Автор оригинала: Chese
Функция mail возврашает TRUE или FALSE, а можно ли при FALSE отловить, почему именно не ушло письмо т.е. код ошибки.

Не уйти оно может только по одной причине — в php.ini путь к sendmail указан неправильно.

Chese

Guest


  • #8

Не уйти оно может только по одной причине — в php.ini путь к sendmail указан неправильно

Ну по чему? ;) Если емайл верный, а записи в DNS про домен нет, или у Sendmail переполнена очередь и он не возьмет в отправку….

Barlone

Guest


  • #9

Если емайл верный, а записи в DNS про домен нет

… то письмо успешно передастся sendmail’у, а вот он уже не сможет его доставить. Очередь переполнена? Ну не знаю, тестировать не возьмусь :)

trolik

Guest


  • #10

зачем юзать функцию mail?
передавай парметры sendmail и пиши тело письма с заголовками ему же… а потом анализируй код возврата

-ViT-

Guest


  • #11

А вот что сегодня выдал броузер….

Автор оригинала: tony2001
тогда все пропало.
в исходниках нет возврата ошибок — есть либо TRUE, либо FALSE

Я как раз сегодня добрался до функции mail. Иногда пропадает переменная сессии и в качестве e-mail передается пустое поле — и тогда броузер пишет (цитирую):

Warning: Bad Message destination in F:WEBProjectsinetpubwwwrootPHPDevelopingRegform2.phtml on line 73

То есть какая-то же диагностика есть?? :confused:

Barlone

Guest


  • #12

Под виндой mail работает совсем не так, как под unix.

  • #13

ViT:
какая диагностика ?
неправильный аргумент приходит — вот и ошибка.
проверяй ДО и все будет ок.
исходники посмотри — там все достаточно ясно.

-ViT-

Guest


  • #14

2 tony2001: — это я знаю, и в данном случае потерянный аргумент — это нормально, это стадия отладки у меня шла… Я просто хочу спросить (абсолютно ПО теме топика) — что раз пришло такое сообщение, значит все же что-то как-то диагносцируется? В исходниках (приведенных тобой) — все совершенно ясно, простейшая конструкция.. Но кто тогда вернул мне этот мессадж? :)

2 Barlone: ты прав, это PHP у меня крутится под IIS, и клиент, с которого снято сообщение — WinXP/Opera. Но ведь ядро PHP (сорцы) — одинаково или тоже нет?

  • #15

речь шла о том «как определить почему не доставляется письмо».
так ?
логично предположить, что элементарная проверка на «а что нам передали как е-мэйл?» там присутствует.
так ?
вот ты видишь ее результат.
более подробно — смотри исходники.

честно говоря, немного не понимаю понятия «диагностика».
если проверка аргумента — это диагностика, то да, диагностика есть.

Barlone

Guest


  • #16

Специально посмотрел в исходники РНР :)
Для Win (#ifdef PHP_WIN32) там идет отправка по smtp, и какие-то ошибки в smtp-сессии видимо отлавливаются.
Для не-win никаких проверок не делается, popen’ом открывается sendmail, ему пихаются «To:», «Subject:», остальные заголовки (как есть) и тело письма. Ошибка может быть только одна: «Could not execute mail delivery program» если popen не сработал.

-ViT-

Guest


  • #17

2 Barlone:
Вот спасибо, а то я никак до исходников не доберусь! :(
Лично мне так механизм стал намного понятнее!
Следовательно, если переносить хост на Unix-сервера, то надо вновь очень тщательно тестить/вычищать/модернизировать все скрипты…. мда, жаль :(

  • #18

http://cvs.php.net/co.php/php4/ext/standard/mail.c?login=2&r=1.66.2.1
смотреть
php_mail() & PHP_FUNCTION(mail)

Barlone

Guest


  • #19

Ну тестить-то надо в любом случае. :) Модернизировать ? Зачем ? Если письмо формируется правильно, без разницы, как оно отправляется.
Кстати, если указать sendmail_path под виндой, то он будет использоваться, и отправляться как на unix. Остается только найти sendmail под винду. :)

Chese

Guest


  • #20

Автор оригинала: trolik
зачем юзать функцию mail?
передавай парметры sendmail и пиши тело письма с заголовками ему же… а потом анализируй код возврата

Молчит как партизан sendmail

PHP:

error_reporting(E_ALL);
$mailer = popen ("/usr/sbin/sendmail -t -i","w");
fwrite ($mailer,"Subject: Test
From: [email][email protected][/email]
To: [email protected]@aaa.com

Test!!!
");
$read = fread($mailer, 2096);
echo $read;
pclose ($mailer);

Содержание

  1. Php return mail error
  2. Description
  3. Parameters
  4. Return Values
  5. Changelog
  6. Examples
  7. mail — Отправляет электронную почту
  8. Описание
  9. Список параметров
  10. Возвращаемые значения
  11. Список изменений
  12. Примеры
  13. Предопределённые константы
  14. User Contributed Notes 20 notes

Php return mail error

(PHP 4, PHP 5, PHP 7, PHP 8)

mail — Send mail

Description

Parameters

Receiver, or receivers of the mail.

The formatting of this string must comply with » RFC 2822. Some examples are:

  • user@example.com
  • user@example.com, anotheruser@example.com
  • User
  • User , Another User

Subject of the email to be sent.

Subject must satisfy » RFC 2047.

Message to be sent.

Each line should be separated with a CRLF (rn). Lines should not be larger than 70 characters.

(Windows only) When PHP is talking to a SMTP server directly, if a full stop is found on the start of a line, it is removed. To counter-act this, replace these occurrences with a double dot.

String or array to be inserted at the end of the email header.

This is typically used to add extra headers (From, Cc, and Bcc). Multiple extra headers should be separated with a CRLF (rn). If outside data are used to compose this header, the data should be sanitized so that no unwanted headers could be injected.

If an array is passed, its keys are the header names and its values are the respective header values.

Before PHP 5.4.42 and 5.5.27, repectively, additional_headers did not have mail header injection protection. Therefore, users must make sure specified headers are safe and contains headers only. i.e. Never start mail body by putting multiple newlines.

When sending mail, the mail must contain a From header. This can be set with the additional_headers parameter, or a default can be set in php.ini .

Failing to do this will result in an error message similar to Warning: mail(): «sendmail_from» not set in php.ini or custom «From:» header missing . The From header sets also Return-Path when sending directly via SMTP (Windows only).

If messages are not received, try using a LF (n) only. Some Unix mail transfer agents (most notably » qmail) replace LF by CRLF automatically (which leads to doubling CR if CRLF is used). This should be a last resort, as it does not comply with » RFC 2822.

The additional_params parameter can be used to pass additional flags as command line options to the program configured to be used when sending mail, as defined by the sendmail_path configuration setting. For example, this can be used to set the envelope sender address when using sendmail with the -f sendmail option.

This parameter is escaped by escapeshellcmd() internally to prevent command execution. escapeshellcmd() prevents command execution, but allows to add additional parameters. For security reasons, it is recommended for the user to sanitize this parameter to avoid adding unwanted parameters to the shell command.

Since escapeshellcmd() is applied automatically, some characters that are allowed as email addresses by internet RFCs cannot be used. mail() can not allow such characters, so in programs where the use of such characters is required, alternative means of sending emails (such as using a framework or a library) is recommended.

The user that the webserver runs as should be added as a trusted user to the sendmail configuration to prevent a ‘X-Warning’ header from being added to the message when the envelope sender (-f) is set using this method. For sendmail users, this file is /etc/mail/trusted-users .

Return Values

Returns true if the mail was successfully accepted for delivery, false otherwise.

It is important to note that just because the mail was accepted for delivery, it does NOT mean the mail will actually reach the intended destination.

Changelog

Version Description
7.2.0 The additional_headers parameter now also accepts an array .

Examples

Example #1 Sending mail.

Using mail() to send a simple email:

// The message
$message = «Line 1rnLine 2rnLine 3» ;

// In case any of our lines are larger than 70 characters, we should use wordwrap()
$message = wordwrap ( $message , 70 , «rn» );

// Send
mail ( ‘caffeinated@example.com’ , ‘My Subject’ , $message );
?>

Example #2 Sending mail with extra headers.

The addition of basic headers, telling the MUA the From and Reply-To addresses:

= ‘nobody@example.com’ ;
$subject = ‘the subject’ ;
$message = ‘hello’ ;
$headers = ‘From: webmaster@example.com’ . «rn» .
‘Reply-To: webmaster@example.com’ . «rn» .
‘X-Mailer: PHP/’ . phpversion ();

mail ( $to , $subject , $message , $headers );
?>

Example #3 Sending mail with extra headers as array

This example sends the same mail as the example immediately above, but passes the additional headers as array (available as of PHP 7.2.0).

= ‘nobody@example.com’ ;
$subject = ‘the subject’ ;
$message = ‘hello’ ;
$headers = array(
‘From’ => ‘webmaster@example.com’ ,
‘Reply-To’ => ‘webmaster@example.com’ ,
‘X-Mailer’ => ‘PHP/’ . phpversion ()
);

mail ( $to , $subject , $message , $headers );
?>

Example #4 Sending mail with an additional command line parameter.

The additional_params parameter can be used to pass an additional parameter to the program configured to use when sending mail using the sendmail_path .

Example #5 Sending HTML email

It is also possible to send HTML email with mail() .

// Multiple recipients
$to = ‘johny@example.com, sally@example.com’ ; // note the comma

// Subject
$subject = ‘Birthday Reminders for August’ ;

// Message
$message = ‘

Birthday Reminders for August

Источник

mail — Отправляет электронную почту

(PHP 4, PHP 5, PHP 7)

mail — Отправляет электронную почту

Описание

Отправляет электронную почту.

Список параметров

Получатель, или получатели письма.

Формат этого параметра должен соответствовать » RFC 2822. Несколько примеров:

  • user@example.com
  • user@example.com, anotheruser@example.com
  • User
  • User , Another User

Тема отправляемого письма.

Тема должна соответствовать » RFC 2047.

Каждая строка должна быть отделена символом CRLF (rn). Строки не должны быть длиннее 70 символов.

(Только для Windows) Если PHP передаёт данные напрямую SMTP-серверу и в начале строки стоит точка, то она будет удалена. Чтобы избежать этого замените все такие точки на две.

Строка, которая будет дополнительно вставлена в конец отправляемых заголовков письма.

Обычно используется для добавления дополнительных заголовков (From, Cc, and Bcc). Несколько дополнительных заголовков должны быть разделены CRLF (rn). Если для составления этого заголовка используются внешние данные, то они должны быть проверены для избежания инъекций нежелательных заголовков.

При отправке письмо должно содержать заголовок From. Он может быть установлен с помощью параметра additional_headers , или значение по умолчанию может быть установлено в php.ini .

Если заголовок отсутствует, будет сгенерировано сообщение об ошибке вида Warning: mail(): «sendmail_from» not set in php.ini or custom «From:» header missing. Заголовок From также определяет заголовок Return-Path в Windows.

Если сообщения не отправляются, попробуйте использовать только LF (n). Некоторые агенты пересылки сообщений Unix (особенно » qmail) автоматически заменяют LF на CRLF (что приводит к двойному CR, если использовалось CRLF). Используйте эту меру в крайнем случае, так как это нарушает » RFC 2822.

Параметр additional_parameters может быть использован для передачи дополнительных флагов в виде аргументов командной строки для программы сконфигурированной для отправки писем, указанной директивой sendmail_path. Например, можно установить отправителя письма при использовании sendmail с помощью опции -f.

Параметр автоматически экранируется функцией escapeshellcmd() , чтобы не допустить выполнение команд. Но escapeshellcmd() позволяет добавлять дополнительные параметры. В целях безопасности рекомендуется проверять и очищать этот параметр.

Так как escapeshellcmd() применяется автоматически, то нельзя использовать некоторые символы, допустимые к использованию в email-адресах некоторыми RFC. mail() не допускает такие символы, поэтому в программах, в которых они требуются, рекомендуется использовать альтернативы для их отправки (например фреймворки или библиотеки).

Пользователь, под которым работает веб-сервер должен быть добавлен в список доверенных в конфигурации sendmail для того чтобы избежать добавления заголовка ‘X-Warning’ при указании отправителя с помощью опции (-f). Для пользователей sendmail — это файл /etc/mail/trusted-users .

Возвращаемые значения

Возвращает TRUE , если письмо было принято для передачи, иначе FALSE .

Важно заметить, что то что письмо было принято для передачи вовсе НЕ означает что оно достигло получателя.

Список изменений

Версия Описание
4.2.3 Параметр additional_parameters отключен в режиме safe_mode и при его использовании функция mail() вызовет предупреждение и вернет FALSE .

Примеры

Пример #1 Отправка письма.

Использование функции mail() для отправки простого письма:

// Сообщение
$message = «Line 1rnLine 2rnLine 3» ;

// На случай если какая-то строка письма длиннее 70 символов мы используем wordwrap()
$message = wordwrap ( $message , 70 , «rn» );

// Отправляем
mail ( ‘caffeinated@example.com’ , ‘My Subject’ , $message );
?>

Пример #2 Отправка письма с дополнительными заголовками.

Добавление простых заголовков, сообщающих почтовому агенту адреса From и Reply-To:

= ‘nobody@example.com’ ;
$subject = ‘the subject’ ;
$message = ‘hello’ ;
$headers = ‘From: webmaster@example.com’ . «rn» .
‘Reply-To: webmaster@example.com’ . «rn» .
‘X-Mailer: PHP/’ . phpversion ();

mail ( $to , $subject , $message , $headers );
?>

Пример #3 Отправка письма с дополнительными аргументами командной строки.

Параметр additional_parameters может быть использован для передачи дополнительных параметров программе, используемой для отправки писем с помощью директивы sendmail_path.

Пример #4 Отправка HTML-сообщения

С помощью функции mail() также можно отправить и HTML-письмо.

// несколько получателей
$to = ‘aidan@example.com’ . ‘, ‘ ; // обратите внимание на запятую
$to .= ‘wez@example.com’ ;

// тема письма
$subject = ‘Birthday Reminders for August’ ;

// текст письма
$message = ‘

Birthday Reminders for August

Источник

Предопределённые константы

Перечисленные ниже константы всегда доступны как часть ядра PHP.

Замечание: Данные имена констант можно использовать в файле php.ini но не вне PHP, как например в файле httpd.conf , где вместо них необходимо использовать значения их битовых масок.

Ошибки и протоколирование

Значение Константа Описание Примечание
1 E_ERROR ( int ) Фатальные ошибки времени выполнения. Это неустранимые средствами самого скрипта ошибки, такие как ошибка распределения памяти и т.п. Выполнение скрипта в таком случае прекращается.
2 E_WARNING ( int ) Предупреждения времени выполнения (не фатальные ошибки). Выполнение скрипта в таком случае не прекращается.
4 E_PARSE ( int ) Ошибки на этапе компиляции. Должны генерироваться только парсером.
8 E_NOTICE ( int ) Уведомления времени выполнения. Указывают на то, что во время выполнения скрипта произошло что-то, что может указывать на ошибку, хотя это может происходить и при обычном выполнении программы.
16 E_CORE_ERROR ( int ) Фатальные ошибки, которые происходят во время запуска РНР. Такие ошибки схожи с E_ERROR , за исключением того, что они генерируются ядром PHP.
32 E_CORE_WARNING ( int ) Предупреждения (не фатальные ошибки), которые происходят во время начального запуска РНР. Такие предупреждения схожи с E_WARNING , за исключением того, что они генерируются ядром PHP.
64 E_COMPILE_ERROR ( int ) Фатальные ошибки на этапе компиляции. Такие ошибки схожи с E_ERROR , за исключением того, что они генерируются скриптовым движком Zend.
128 E_COMPILE_WARNING ( int ) Предупреждения на этапе компиляции (не фатальные ошибки). Такие предупреждения схожи с E_WARNING , за исключением того, что они генерируются скриптовым движком Zend.
256 E_USER_ERROR ( int ) Сообщения об ошибках, сгенерированные пользователем. Такие ошибки схожи с E_ERROR , за исключением того, что они генерируются в коде скрипта средствами функции PHP trigger_error() .
512 E_USER_WARNING ( int ) Предупреждения, сгенерированные пользователем. Такие предупреждения схожи с E_WARNING , за исключением того, что они генерируются в коде скрипта средствами функции PHP trigger_error() .
1024 E_USER_NOTICE ( int ) Уведомления, сгенерированные пользователем. Такие уведомления схожи с E_NOTICE , за исключением того, что они генерируются в коде скрипта, средствами функции PHP trigger_error() .
2048 E_STRICT ( int ) Включаются для того, чтобы PHP предлагал изменения в коде, которые обеспечат лучшее взаимодействие и совместимость кода.
4096 E_RECOVERABLE_ERROR ( int ) Фатальные ошибки с возможностью обработки. Такие ошибки указывают, что, вероятно, возникла опасная ситуация, но при этом, скриптовый движок остаётся в стабильном состоянии. Если такая ошибка не обрабатывается функцией, определённой пользователем для обработки ошибок (смотрите set_error_handler() ), выполнение приложения прерывается, как происходит при ошибках E_ERROR .
8192 E_DEPRECATED ( int ) Уведомления времени выполнения об использовании устаревших конструкций. Включаются для того, чтобы получать предупреждения о коде, который не будет работать в следующих версиях PHP.
16384 E_USER_DEPRECATED ( int ) Уведомления времени выполнения об использовании устаревших конструкций, сгенерированные пользователем. Такие уведомления схожи с E_DEPRECATED за исключением того, что они генерируются в коде скрипта, с помощью функции PHP trigger_error() .
32767 E_ALL ( int ) Все поддерживаемые ошибки, предупреждения и замечания.

Представленные выше значения (как числовые, так и символьные) используются для задания битовой маски, определяющей об ошибках какого типа будет даваться отчёт. Вы можете использовать побитовые операторы, чтобы совмещать эти значения для указания определённых типов ошибок. Стоит отметить, что в php.ini допустимы только следующие операторы: ‘|’, ‘

User Contributed Notes 20 notes

[Editor’s note: fixed E_COMPILE_* cases that incorrectly returned E_CORE_* strings. Thanks josiebgoode.]

The following code expands on Vlad’s code to show all the flags that are set. if not set, a blank line shows.

= error_reporting ();
for ( $i = 0 ; $i 15 ; $i ++ ) <
print FriendlyErrorType ( $errLvl & pow ( 2 , $i )) . «
\n» ;
>

function FriendlyErrorType ( $type )
<
switch( $type )
<
case E_ERROR : // 1 //
return ‘E_ERROR’ ;
case E_WARNING : // 2 //
return ‘E_WARNING’ ;
case E_PARSE : // 4 //
return ‘E_PARSE’ ;
case E_NOTICE : // 8 //
return ‘E_NOTICE’ ;
case E_CORE_ERROR : // 16 //
return ‘E_CORE_ERROR’ ;
case E_CORE_WARNING : // 32 //
return ‘E_CORE_WARNING’ ;
case E_COMPILE_ERROR : // 64 //
return ‘E_COMPILE_ERROR’ ;
case E_COMPILE_WARNING : // 128 //
return ‘E_COMPILE_WARNING’ ;
case E_USER_ERROR : // 256 //
return ‘E_USER_ERROR’ ;
case E_USER_WARNING : // 512 //
return ‘E_USER_WARNING’ ;
case E_USER_NOTICE : // 1024 //
return ‘E_USER_NOTICE’ ;
case E_STRICT : // 2048 //
return ‘E_STRICT’ ;
case E_RECOVERABLE_ERROR : // 4096 //
return ‘E_RECOVERABLE_ERROR’ ;
case E_DEPRECATED : // 8192 //
return ‘E_DEPRECATED’ ;
case E_USER_DEPRECATED : // 16384 //
return ‘E_USER_DEPRECATED’ ;
>
return «» ;
>
?>

-1 is also semantically meaningless as a bit field, and only works in 2s-complement numeric representations. On a 1s-complement system -1 would not set E_ERROR. On a sign-magnitude system -1 would set nothing at all! (see e.g. http://en.wikipedia.org/wiki/Ones%27_complement)

If you want to set all bits,

0 is the correct way to do it.

But setting undefined bits could result in undefined behaviour and that means *absolutely anything* could happen 🙂

A simple and neat way to get the error level from the error code. You can even customize the error level names further.

= [
E_ERROR => «E_ERROR» ,
E_WARNING => «E_WARNING» ,
E_PARSE => «E_PARSE» ,
E_NOTICE => «E_NOTICE» ,
E_CORE_ERROR => «E_CORE_ERROR» ,
E_CORE_WARNING => «E_CORE_WARNING» ,
E_COMPILE_ERROR => «E_COMPILE_ERROR» ,
E_COMPILE_WARNING => «E_COMPILE_WARNING» ,
E_USER_ERROR => «E_USER_ERROR» ,
E_USER_WARNING => «E_USER_WARNING» ,
E_USER_NOTICE => «E_USER_NOTICE» ,
E_STRICT => «E_STRICT» ,
E_RECOVERABLE_ERROR => «E_RECOVERABLE_ERROR» ,
E_DEPRECATED => «E_DEPRECATED» ,
E_USER_DEPRECATED => «E_USER_DEPRECATED» ,
E_ALL => «E_ALL»
];

echo $exceptions [ «1» ];
$code = 256 ;
echo $exceptions [ $code ];
?>

Output:
E_ERROR
E_USER_ERROR

This will need updating when PHP updates the error level names. Otherwise, it works just fine.

An other way to get all PHP errors that are set to be reported. This code will even work, when additional error types are added in future.

= 0 ;
foreach ( array_reverse ( str_split ( decbin ( error_reporting ()))) as $bit ) <
if ( $bit == 1 ) <
echo array_search ( pow ( 2 , $pot ), get_defined_constants ( true )[ ‘Core’ ]). «
n» ;
>
$pot ++;
>
?>

A neat way to have a place in code to control error reporting configuration 🙂

= [
E_ERROR => FALSE ,
E_WARNING => TRUE ,
E_PARSE => TRUE ,
E_NOTICE => TRUE ,
E_CORE_ERROR => FALSE ,
E_CORE_WARNING => FALSE ,
E_COMPILE_ERROR => FALSE ,
E_COMPILE_WARNING => FALSE ,
E_USER_ERROR => TRUE ,
E_USER_WARNING => TRUE ,
E_USER_NOTICE => TRUE ,
E_STRICT => FALSE ,
E_RECOVERABLE_ERROR => TRUE ,
E_DEPRECATED => FALSE ,
E_USER_DEPRECATED => TRUE ,
E_ALL => FALSE ,
];

error_reporting (
array_sum (
array_keys ( $errorsActive , $search = true )
)
);

super simple error code to human readable conversion:

function prettycode($code) <
return $code == 0 ? «FATAL» : array_search($code, get_defined_constants(true)[‘Core’]);
>

Notes posted above limited to current errors level as on 26th Aug 2016, following snippet will work even on introduction of new error level

$errLvl = error_reporting();
for ( $i = 1; $i

As for me, the best way to get error name by int value is that. And it’s works fine for me 😉
( array_slice ( get_defined_constants ( true )[ ‘Core’ ], 1 , 15 , true ))[ $type ];

//the same in readable form
array_flip (
array_slice (
get_defined_constants ( true )[ ‘Core’ ],
1 ,
15 ,
true
)
)[ $type ]

A shorter version of vladvarna’s FriendlyErrorType($type)
function getErrorTypeByValue ( $type ) <
$constants = get_defined_constants ( true );

foreach ( $constants [ ‘Core’ ] as $key => $value ) < // Each Core constant
if ( preg_match ( ‘/^E_/’ , $key ) ) < // Check error constants
if ( $type == $value )
return( » $key = $value » );
>
>
> // getErrorTypeByValue()

echo «[» . getErrorTypeByValue ( 1 ) . «]» . PHP_EOL ;
echo «[» . getErrorTypeByValue ( 0 ) . «]» . PHP_EOL ;
echo «[» . getErrorTypeByValue ( 8 ) . «]» . PHP_EOL ;
?>

Will give
[E_ERROR=1]
[]
[E_NOTICE=8]

My version!
For long list function returns for example «E_ALL without E_DEPRECATED «

function errorLevel()
<
$levels = array(
‘E_ERROR’,
‘E_WARNING’,
‘E_PARSE’,
‘E_NOTICE’,
‘E_CORE_ERROR’,
‘E_CORE_WARNING’,
‘E_COMPILE_ERROR’,
‘E_COMPILE_WARNING’,
‘E_USER_ERROR’,
‘E_USER_WARNING’,
‘E_USER_NOTICE’,
‘E_STRICT’,
‘E_RECOVERABLE_ERROR’,
‘E_DEPRECATED’,
‘E_USER_DEPRECATED’,
‘E_ALL’
);
$excluded = $included = array();
$errLvl = error_reporting();
foreach ($levels as $lvl) <
$val = constant($lvl);
if ($errLvl & $val) <
$included []= $lvl;
> else <
$excluded []= $lvl;
>
>
if (count($excluded) > count($included)) <
echo ‘
Consist: ‘.implode(‘,’, $included);
> else <
echo ‘
Consist: E_ALL without ‘.implode(‘,’, $excluded);
>
>

Well, technically -1 will show all errors which includes any new ones included by PHP. My guess is that E_ALL will always include new error constants so I usually prefer:

( E_ALL | E_STRICT );
?>

Reason being: With a quick glance anyone can tell you what errors are reported. -1 might be a bit more cryptic to newer programmers.

this would give you all the reported exception list of your configuration.

Источник

mail

(PHP 4, PHP 5, PHP 7)

mailОтправляет электронную почту

Описание

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

Список параметров

to

Получатель, или получатели письма.

Формат этого параметра должен соответствовать
» RFC 2822. Несколько примеров:

  • user@example.com
  • user@example.com, anotheruser@example.com
  • User <user@example.com>
  • User <user@example.com>, Another User <anotheruser@example.com>
subject

Тема отправляемого письма.

Предостережение

Тема должна соответствовать » RFC 2047.

message

Отправляемое сообщение.

Каждая строка должна быть отделена символом CRLF (rn).
Строки не должны быть длиннее 70 символов.

Предостережение

(Только для Windows) Если PHP передаёт данные напрямую SMTP-серверу и
в начале строки стоит точка, то она будет удалена. Чтобы избежать этого замените
все такие точки на две.


<?php
$text 
str_replace("n.""n.."$text);
?>

additional_headers (необязательный)

Строка, которая будет дополнительно вставлена в конец отправляемых заголовков письма.

Обычно используется для добавления дополнительных заголовков (From, Cc, and Bcc).
Несколько дополнительных заголовков должны быть разделены CRLF (rn).
Если для составления этого заголовка используются внешние данные,
то они должны быть проверены для избежания инъекций нежелательных заголовков.

Замечание:

При отправке письмо должно содержать
заголовок From. Он может быть установлен с помощью
параметра additional_headers, или значение
по умолчанию может быть установлено в php.ini.

Если заголовок отсутствует, будет сгенерировано сообщение об ошибке
вида Warning: mail(): «sendmail_from» not
set in php.ini or custom «From:» header missing
.
Заголовок From также определяет заголовок
Return-Path в Windows.

Замечание:

Если сообщения не отправляются, попробуйте использовать только LF (n).
Некоторые агенты пересылки сообщений Unix (особенно
» qmail) автоматически заменяют LF на CRLF
(что приводит к двойному CR, если использовалось CRLF).
Используйте эту меру в крайнем случае, так как это нарушает
» RFC 2822.

additional_parameters (необязательный)

Параметр additional_parameters может быть
использован для передачи дополнительных флагов в виде аргументов
командной строки для программы сконфигурированной для отправки писем,
указанной директивой sendmail_path. Например, можно
установить отправителя письма при использовании sendmail с помощью опции
-f.

Параметр автоматически экранируется функцией escapeshellcmd(),
чтобы не допустить выполнение команд. Но escapeshellcmd()
позволяет добавлять дополнительные параметры. В целях безопасности
рекомендуется проверять и очищать этот параметр.

Так как escapeshellcmd() применяется автоматически, то нельзя использовать
некоторые символы, допустимые к использованию в email-адресах некоторыми RFC.
mail() не допускает такие символы, поэтому в программах, в которых они требуются,
рекомендуется использовать альтернативы для их отправки (например фреймворки или библиотеки).

Пользователь, под которым работает веб-сервер должен быть добавлен в список
доверенных в конфигурации sendmail для того чтобы избежать добавления заголовка
‘X-Warning’ при указании отправителя с помощью опции (-f).
Для пользователей sendmail — это файл /etc/mail/trusted-users.

Возвращаемые значения

Возвращает TRUE, если письмо было принято для передачи, иначе FALSE.

Важно заметить, что то что письмо было принято для передачи вовсе НЕ означает
что оно достигло получателя.

Список изменений

Версия Описание
4.2.3 Параметр additional_parameters отключен в
режиме safe_mode и при
его использовании функция mail() вызовет
предупреждение и вернет FALSE.

Примеры

Пример #1 Отправка письма.

Использование функции mail() для отправки простого письма:


<?php
// Сообщение
$message "Line 1rnLine 2rnLine 3";// На случай если какая-то строка письма длиннее 70 символов мы используем wordwrap()
$message wordwrap($message70"rn");// Отправляем
mail('caffeinated@example.com''My Subject'$message);
?>

Пример #2 Отправка письма с дополнительными заголовками.

Добавление простых заголовков, сообщающих почтовому агенту
адреса From и Reply-To:


<?php
$to      
'nobody@example.com';
$subject 'the subject';
$message 'hello';
$headers 'From: webmaster@example.com' "rn" .
    
'Reply-To: webmaster@example.com' "rn" .
    
'X-Mailer: PHP/' phpversion();mail($to$subject$message$headers);
?>

Пример #3 Отправка письма с дополнительными аргументами командной строки.

Параметр additional_parameters может быть использован
для передачи дополнительных параметров программе, используемой для отправки
писем с помощью директивы sendmail_path.


<?php
mail
('nobody@example.com''the subject''the message'null,
   
'-fwebmaster@example.com');
?>

Пример #4 Отправка HTML-сообщения

С помощью функции mail() также можно отправить и HTML-письмо.


<?php
// несколько получателей
$to  'aidan@example.com' ', '// обратите внимание на запятую
$to .= 'wez@example.com';// тема письма
$subject 'Birthday Reminders for August';// текст письма
$message '
<html>
<head>
  <title>Birthday Reminders for August</title>
</head>
<body>
  <p>Here are the birthdays upcoming in August!</p>
  <table>
    <tr>
      <th>Person</th><th>Day</th><th>Month</th><th>Year</th>
    </tr>
    <tr>
      <td>Joe</td><td>3rd</td><td>August</td><td>1970</td>
    </tr>
    <tr>
      <td>Sally</td><td>17th</td><td>August</td><td>1973</td>
    </tr>
  </table>
</body>
</html>
'
;// Для отправки HTML-письма должен быть установлен заголовок Content-type
$headers  'MIME-Version: 1.0' "rn";
$headers .= 'Content-type: text/html; charset=iso-8859-1' "rn";// Дополнительные заголовки
$headers .= 'To: Mary <mary@example.com>, Kelly <kelly@example.com>' "rn";
$headers .= 'From: Birthday Reminder <birthday@example.com>' "rn";
$headers .= 'Cc: birthdayarchive@example.com' "rn";
$headers .= 'Bcc: birthdaycheck@example.com' "rn";// Отправляем
mail($to$subject$message$headers);
?>

Замечание:

Для отправки HTML или других комплексных сообщений рекомендуется использовать
PEAR-пакет » PEAR::Mail_Mime.

Примечания

Замечание:

Реализация функции mail() в Windows во многом отличается от
реализации в Unix. Во-первых, она не использует локальную программу для
составления писем, а работает непосредственно с сокетами, что означает что
необходим почтовый агент (MTA), ожидающий
соединений на сокете (может быть как на локальном так и на
удаленном сервере).

Во-вторых, дополнительные заголовки вроде:
From:,
Cc:,
Bcc: и
Date:
интерпретируются в первую очередь не,
MTA, а PHP.

Поэтому параметр to не должен быть адресом вида
«Something <someone@example.com>». Команда
mail может неправильно интерпретировать этот адрес во время передачи
данных MTA.

Замечание:

Не следует использовать функцию mail() для отправки
большого количества писем в цикле. Функция открывает и закрывает
соединение с SMTP-сервером для каждого письма, что не очень эффективно.

Для отправки большого количества сообщений обратите внимание на пакеты
» PEAR::Mail и
» PEAR::Mail_Queue.

Замечание:

Полезные RFC:
» RFC 1896,
» RFC 2045,
» RFC 2046,
» RFC 2047,
» RFC 2048,
» RFC 2049 и
» RFC 2822.

Вернуться к: Почта

PHP_Deep_25.12-5020-ea7d14.png

В этой статье пойдет разговор о том, как выполнить настройку своего Mail на PHP. Рассмотрим особенности использования Mail, что делать, если письма не отправляются, как выполняется отправка с вложением и какие бывают проблемы с кодировкой.

Какой бы интернет-проект на PHP вы не сделали, на нём должна быть форма обратной связи, что особенно актуально для проектов коммерческого направления. А значит, вам не обойтись без функции mail. Что же, давайте посмотрим, как использовать эту функцию для отправки сообщений.

Лирическое отступление

Прежде чем двигаться дальше, давайте немного вспомним теорию. Чтобы отправлять письма, нам потребуется почтовый сервер SMTP. Но это не проблема, т. к. он есть практически на всех современных платных хостингах. SMTP — сетевой протокол (protocol), используемый для передачи почты в сетях TCP/IP. Почтовые серверы и прочие агенты пересылки задействуют SMTP для получения и отправки сообщений.

Для приёма почты нам понадобится POP-сервер. Также следует понимать, что сам по себе PHP не отправляет сообщение, а лишь передаёт команды приложению sendmail — именно оно занимается отправкой, следовательно, его нужно иметь (если используете Денвер, то данное приложение уже встроено). Вдобавок ко всему, все сообщения почты помещаются в директорию под названием «tmp/!sendmail».

Как настроить mail?

Настройка выполняется в конфигурационном файле php.ini. В этом файле нужно прописать путь к лог-файлам, а также задать значения порта.

Общее описание функции:

Screenshot_4-1801-3d9772.png

Список основных параметров:
1. to — получатель (получатели) письма. Формат должен соответствовать » RFC 2822. Пример — [email protected];
2. subject — тема отправляемого письма;
3. message — отправляемое сообщение. Строка отделяется символом CRLF (rn). Сами строки не д. б. длиннее семидесяти символов.
4. additional_headers — этот параметр является необязательным. Обозначает строку либо массив, которые вставляются в самый конец отправляемых заголовков.
5. additional_parameters — тоже необязателен. Используют для передачи дополнительных флагов в качестве аргументов командной строки для программы, которая сконфигурирована для отправки писем и указана директивой sendmail_path. К примеру, есть возможность установить отправителя при применении sendmail и с помощью опции -f.

Приведём пример:


Если вы являетесь веб-мастером и используете Денвер, то информация, которая будет вами отправлена, сохранится на виртуальном диске Z в папке «tmp!sendmail».

Особенности использования

Работа функции mail в PHP зависит от ряда нюансов, включая вид операционной системы, выполненные настройки и параметры. Вот некоторые особенности:
— во время отправки письма заголовок Form задаётся через необязательный параметр «additional_headers». Если его нет, нередко возникает ошибка при отправлении;
— заголовки разделяйте символами перевода на новую строку и перевода каретки (rn);
— следите, чтобы длина строки не превышала 70 знаков, для регулировки тоже используйте (rn).

Что делать, если функция не отправляет письма?

Даже если учесть всё вышеперечисленное, mail в PHP иногда не работает, причём на локальном сервере всё отправляется нормально. Одна из причин — некорректная настройка функции непосредственно на хостинге. Для решения проблемы рекомендуется обратиться к конфигурационному файлу php.ini и посмотреть на параметры функции «disable_functions». Дело в том, что нужная вам функция mail() может не работать, если она занесена в php.ini в раздел запрещённых (disable_functions).

1-20219-7653bc.jpg

Идём дальше. Мы можем проверить работоспособность, написав простой код и разместив его в корневом каталоге созданного веб-проекта (сайта):


Если всё функционирует верно, на экране браузера мы увидим цифру один — «1». Её нам вернёт «print» после выполнения. В качестве кодировки рекомендуется использовать UTF-8.

2-20219-865104.jpg

Важный момент! Если вы в качестве локального сервера используете OpenServer, то письма будут сохраняться в папке C:openserveruserdatatempemail. Естественно, если вы его установили на локальный диск «С».

Отправка с вложением

Давайте посмотрим, как отсылать сообщения, включающие в себя прикреплённый файл. Воспользуемся для этого функцией sendMailAttachment():

<?
$file = "./files/test.txt"; // прописывается путь к тому файлу, который надо отправить
$mailTo = "[email protected]"; // адрес отправителя
$from = "[email protected]"; // от кого письмо (от чьего имени)
$subject = "Test file"; // тема
$message = "Текст с вложением"; // содержимое письма
$r = sendMailAttachment($mailTo, $from, $subject, $message, $file); // отправка письма c вложением
echo ($r)?Отправлено':'Ошибка. Письмо не отправлено!';
//$r = sendMailAttachment($mailTo, $from, $subject, $message); // отправка без вложения
//echo ($r)?Отправлено':'Ошибка. Письмо не отправлено!';
?>

Проблемы с кодировкой

Бывает, что после доставки сообщения поступают в виде вопросов «?» либо каких-то непонятных символов. Это свидетельствует о проблемах с кодировкой. Проблема может заключаться в заголовке From. Такие заголовки по стандарту должны быть в US-ASCII. Существуют 2 формы кодирования —BASE64 и Quoted-Printable. BASE64 более универсальна и может работать с UTF-8, поэтому лучше использовать ее. Пример:

Screenshot_2-1801-1ee0b4.png

Однако в данном варианте заголовки могут быть нечитаемы. Для решения данной проблемы следует написать заголовок так:

Screenshot_3-1801-f2c752.png

Также необходимо использовать исключительно кодировку UTF-8.

Как видите, работа функции mail в PHP совсем несложна. Да, мы рассмотрели лишь наиболее распространённые ошибки, возникающие при её реализации. Однако никто не мешает повысить свои навыки PHP-программирования на наших курсах.

Источники:
https://www.php.net/manual/ru/function.mail.php;
https://start-luck.ru/sozdanie-sayta/php-funkciya-mail.html.

Май 31, 2022

Elena B.

7хв. читання

Отправка Email с PHP Mail и PHPMailer: Полное Руководство

Электронная почта — неотъемлемая часть любого проекта или бизнеса. Хотя существует множество платформ для корпоративной почты, включая Hostinger, Zoho Mail и G Suite, вы также можете отправлять письма с помощью PHP. В этом руководстве мы расскажем, как работает отправка email с PHP mail() — встроенной функции, PHPMailer и простым протоколом передачи почты (SMTP).

Функция PHP mail() 

Функция PHP mail() вызывает программу Sendmail, обычно настраиваемую системным администратором, которая и позволяет отправлять электронные письма.

Чтобы использовать эту функцию, убедитесь, что ваш хостинг-провайдер позволяет вам вручную управлять службой Sendmail.

Возникли проблемы с отправкой писем? Hostinger предусмотрена функция PHP mail().

Если вы уже являетесь клиентом Hostinger, вы можете включить или отключить эту функцию, войдя в hPanel. Нажмите «Почта» -> «Управление почтовыми сервисами».

Раздел "Почта" в Меню hPanel

Служба Sendmail должна быть включена по умолчанию. Однако рекомендуем перепроверить это в вашей панели управления хостингом.

Страница Настройки Почтовых Служб в hPanle

Создание Тестового Файла PHP Mail

Прежде всего, вам необходимо создать файл для PHP-скрипта и поместить его в каталог public_html, чтобы к нему можно было легко получить доступ через доменное имя.

  1. В hPanel щёлкните на Файловый менеджер -> Перейдите на страницу Файлового менеджера.
  2. Создайте новый файл, нажав на иконку «Новый Файл» в верхнем меню. Назовём наш файл testmail.php и завершим процесс создания, нажав кнопку «Создать«.
    Всплывающее Окно Создания Файла в Файловом Менеджере hPanel
  3. Дважды кликните по файлу testmail.php, поскольку мы собираемся редактировать его с помощью функции PHP mail(). Вот пример основных компонентов функции, которые мы будем использовать в этом руководстве. Они будут объяснены более подробно в следующем разделе. Сейчас просто нажмите «Save & Close«, когда закончите редактировать.
    Пример Основных Компонентов Функции PHP mail в Редакторе hPanel
  4. Теперь вы можете отправить электронное письмо, открыв в браузере VashDomen/testmail.php. Не забудьте заменить «VashDomen» на доменное имя, которое вы использовали для создания тестового файла testmail.php.
  5. Теперь отправка email с PHP должна работать. Письмо должно прийти на почту получателя.
    Входящее Письмо в Gmail, Отправленное с Помощью PHP Mail

Компоненты PHP mail

Как мы и обещали, сейчас мы более подробно рассмотрим компоненты PHP-скрипта для отправки сообщений. В примере ниже вы увидите базовый синтаксис email, который поможет лучше понять эту функцию.

Однако, если вам нужна дополнительная информация о функции Sendmail и её компонентах, вы можете обратиться к официальной документации PHP.

Вот синтаксис PHP, который мы использовали в предыдущем разделе:

<?php
    ini_set( 'display_errors', 1 );
    error_reporting( E_ALL );
    $from = "test@hostinger-tutorials.com";
    $to = "test@hostinger.com";
    $subject = "Checking PHP mail";
    $message = "PHP mail works just fine";
    $headers = "From:" . $from;
    mail($to,$subject,$message, $headers);
    echo "The email message was sent.";
?>

Теперь давайте рассмотрим каждую его часть отдельно.

ini_set( 'display_errors', 1 );
error_reporting( E_ALL );

Эти первые две строки охватывают отчёты об ошибках. Они сообщат вам, если скрипт не удалось выполнить.

$from = "test@hostinger-tutorials.com";

Эта строка должна содержать адрес электронной почты отправителя. Большинство хостинг-провайдеров не разрешают использовать случайные адреса, так как это может быть использовано с целью спуфинга (англ.) — подделки писем. Всегда указывайте адреса, созданные для вашего доменного имени или бренда, тогда отправка email c PHP mail должна быть успешной.

$to = "test@gmail.com";

Здесь вы вводите адрес электронной почты получателя.

$subject = "Checking PHP mail";

Здесь мы вводим тему письма.

$message = "PHP mail works just fine";

Здесь мы вводим текст сообщения.

$headers = "From:" . $from;

Указывает важную информацию, такую как адрес отправителя.

mail ($to,$subject,$message,$headers);

Эта строка используется при выполнении функции. Оставьте её без изменений.

echo "The email message was sent.";

Сообщение, которое появится в случае успешного выполнения скрипта.

Отправка Писем с PHPMailer

PHPMailer — популярная библиотека отправки почты для PHP. Она поддерживает отправку писем, как через функцию mail(), так и через простой протокол передачи почты (SMTP). Библиотека значительно упрощает сложный процесс отправки писем с помощью PHP, предоставляя набор готовых функций для создания и отправки почты.

Установить PHPMailer довольно просто, особенно если у вас установлен Composer. Если вы используете Hostinger, вам не нужно об этом беспокоиться, поскольку он по умолчанию включен в каждый пакет хостинга.

Однако, если вам нужно установить PHPMailer вручную, тогда подключите свою учётную запись хостинга через терминал SSH. Следуй этой инструкции:

  1. Загрузите и установите SSH-клиент PuTTY.
  2. Перейдите в панель управления hPanel, найдите и кликните по «SSH-доступ» в разделе «Расширенные«.
  3. Обратите внимание на раздел с информацией для SSH-доступа. Вам понадобится SSH IP, порт, имя пользователя и пароль.
  4. Откройте PuTTY, затем укажите свой SSH IP и порт соответственно.
    Окно Настройки PuTTY
  5. Нажмите Open, появится командное окно. Введите своё имя пользователя и пароль SSH. Как только это будет сделано, нажмите Enter.
  6. ПРИМЕЧАНИЕ: PuTTY НЕ показывает пароли. Не волнуйтесь, если вы не увидите ваш пароль на экране.

  7. Выполните следующую команду:
cd public_html
  1. Нажмите Enter, затем запустите эту команду:
composer require phpmailer/phpmailer
  1. Подождите, пока процесс установки не будет завершён.
    Установка PHPMailer - Терминал

Использование PHPMailer с SMTP Hostinger

Теперь, когда PHPMailer готов к работе, вы можете начать использовать его для отправки почты средствами PHP и через Hostinger SMTP.

  1. Создайте учётную запись электронной почты, войдя в hPanel. Перейдите в раздел «Почтовые аккаунты» -> «Создать новую учётную запись электронной почты». Введите новый адрес электронной почты и установите пароль, затем нажмите «Создать».
    Страница Создания Почты в hPanel
  2. Когда закончите, обратите внимание на свои данные SMTP, расположенные на той же странице в самом вверху.
    Детали Электронной Почты

    ПРИМЕЧАНИЕ. Для того чтобы отправить письмо через PHPMailer, вам нужно знать имя пользователя учётной записи электронной почты, пароль к учётной записи, хост SMTP и порт SMTP.

  3. Создайте файл testphpmailer.php в Public_html. Откройте панель управления hPanel и щёлкните по Файловому менеджеру -> Перейдите на страницу Файлового менеджера
  4. Нажмите на иконку «Новый Файл». Назовите файл testphpmailer.php, а затем нажмите кнопку «Создать«.
  5. Дважды щёлкните по только что созданном файле testphpmailer.php, затем скопируйте и вставьте следующее:
<?php
use PHPMailerPHPMailerPHPMailer;
require 'vendor/autoload.php';
$mail = new PHPMailer;
$mail->isSMTP();
$mail->SMTPDebug = 2;
$mail->Host = 'smtp.hostinger.com';
$mail->Port = 587;
$mail->SMTPAuth = true;
$mail->Username = 'test@hostinger-tutorials.com';
$mail->Password = 'YOUR PASSWORD HERE';
$mail->setFrom('test@hostinger-tutorials.com', 'Your Name');
$mail->addReplyTo('test@hostinger-tutorials.com', 'Your Name');
$mail->addAddress('example@email.com', 'Receiver Name');
$mail->Subject = 'Testing PHPMailer';
$mail->msgHTML(file_get_contents('message.html'), __DIR__);
$mail->Body = 'This is a plain text message body';
//$mail->addAttachment('test.txt');
if (!$mail->send()) {
    echo 'Mailer Error: ' . $mail->ErrorInfo;
} else {
    echo 'The email message was sent.';
}
?>
  1. Измените приведённый выше код соответствующим образом. Например, вам нужно заменить EMAIL_ACCOUNT_PASSWORD своим паролем электронной почты или test@hostinger-tutorials.com на своё имя пользователя, example@gmail.com на адрес электронной почты получателя и т. д. После этого нажмите «Save & Close».
  2. Теперь ваш PHPMailer готов к использованию. Запустите скрипт, введя VashDomen.com/testphpmailer.php в браузере.

Компоненты PHPMailer

Чтобы понять, как работает PHPMailer, давайте разберём приведённый выше пример скрипта, который использует SMTP для отправки электронной почты. Вот подробное объяснение каждого компонента:

use PHPMailerPHPMailerPHPMailer;

Эта строка импортирует класс PHPMailer в глобальное пространство имён.

require '../vendor/autoload.php';

Включает различные библиотеки, необходимые PHPMailer.

$mail->

Все похожие переменные содержат важную информацию, такую как сведения о сервере, заголовки сообщений, вложения и многое другое. Короче говоря, они гарантируют, что отправитель защищён аутентификацией SMTP.

if (!$mail->send()) {

Определяет, что происходит при выполнении скриптов.

echo 'Mailer Error: ' . $mail->ErrorInfo;

В случае сбоя отправки скрипта отобразится сообщение об ошибке с пояснением.

} else {

Определяет, что произойдёт, если скрипт будет выполнен.

echo 'The email message was sent!';

Если письмо успешно отправлено, появится это сообщение.

СОВЕТ: строка SMTPDebug = 2; полезна лишь в том случае, если вы тестируете скрипт и хотите увидеть, как он работает. Измените её на SMTPDebug = 0; если вы закончили тест. Таким образом, конечный пользователь не увидит отчёт по SMTP.

Если вы обратили внимание, то, наверняка, заметили, что в этом примере мы делаем что-то немного по-другому. Вместо обычного текста, мы отправляем HTML-сообщение.

Следовательно, содержимое вашего сообщения будет загружаться из файла message.html, расположенного в том же каталоге — public_html.

Этот формат обеспечивает больше функциональности по сравнению с обычными текстовыми сообщениями. HTML предлагает много опций для настройки. Например, вы можете изменить цвет, стиль, изображение или даже включить мультимедийные файлы, которые обычно устаревают в обычном текстовом сообщении.

Контактная Форма PHPMailer 

Возможности PHPMailer не ограничиваются только отправкой PHP-почты. Ещё один вариант его применения — создание контактной формы, с помощью которой ваша аудитория сможет с вами связаться.

Вот пример скрипта:

<?php
use PHPMailerPHPMailerPHPMailer;
require 'vendor/autoload.php';
    $mail = new PHPMailer;
    $mail->isSMTP();
    $mail->Host = 'smtp.hostinger.com';
    $mail->Port = 587;
    $mail->SMTPAuth = true;
    $mail->Username = 'test@hostinger-tutorials.com';
    $mail->Password = 'EMAIL_ACCOUNT_PASSWORD';
    $mail->setFrom('test@hostinger-tutorials.com', 'Mr. Drago');
    $mail->addAddress('example@gmail.com', 'Receiver Name');
    if ($mail->addReplyTo($_POST['email'], $_POST['name'])) {
        $mail->Subject = 'PHPMailer contact form';
        $mail->isHTML(false);
        $mail->Body = <<<EOT
Email: {$_POST['email']}
Name: {$_POST['name']}
Message: {$_POST['message']}
EOT;
        if (!$mail->send()) {
            $msg = 'Sorry, something went wrong. Please try again later.';
        } else {
            $msg = 'Message sent! Thanks for contacting us.';
        }
    } else {
        $msg = 'Share it with us!';
    }
?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Contact form</title>
</head>
<body>
<h1>Do You Have Anything in Mind?</h1>
<?php if (!empty($msg)) {
    echo "<h2>$msg</h2>";
} ?>
<form method="POST">
    <label for="name">Name: <input type="text" name="name" id="name"></label><br><br>
    <label for="email">Email: <input type="email" name="email" id="email"></label><br><br>   
    <label for="message">Message: <textarea name="message" id="message" rows="8" cols="20"></textarea></label><br><br>
    <input type="submit" value="Send">
</form>
</body>
</html>

Делаем всё то же самое, что и с предыдущими скриптами. Вам нужно создать новый файл в папке public_html. В данном случае мы назвали файл formscript.php. Отредактируйте информацию внутри скрипта соответствующим образом. После этого вам нужно только запустить скрипт из вашего браузера.

Вот как выглядит результат:

Пример Формы для КонтактовКак только ваш клиент отправит форму, он получит подтверждающее сообщение, а содержимое формы будет доставлено вам на почтовый адрес, которое вы должны указать здесь:

$mail->addAddress('example@gmail.com', 'Имя Получателя');

СОВЕТ: если контактная форма PHPMailer не работает, добавьте строку $mail->SMTPDebug = 2;, чтобы узнать, что вызывает проблему. Не забудьте удалить эту строку или поменять 2 на 0, когда закончите.

PHPMailer имеет больше примеров применения, которые вы найдёте в их официальном репозитории GitHub. Кроме того, если вы используете WordPress, вы можете легко создать контактную форму с помощью таких плагинов, как WP Forms, Formidable Form или Gravity Forms.

Главная Страница Сайта Плагина WP Forms

Устранение Распространённых Ошибок PHP Mail и PHPMailer

Отправка Email с PHP или PHPMailer время от времени может сопровождаться ошибками. Вот список наиболее распространённых проблем и способы их решения.

Адрес Отправителя Отклонён: Не Принадлежит Пользователю

Эта ошибка означает, что серверу не удалось пройти аутентификацию с использованием предоставленных данных.

Чтобы исправить это, проверьте адрес электронной почты, который вы использовали для отправки сообщения, и убедитесь, что он соответствует существующему ящику электронной почты. Если он указывает не на тот почтовый ящик, измените его соответствующим образом. Также убедитесь, что вы включили SPF-запись (англ).

Системе Gmail не Удалось Подтвердить, что Это Письмо Отправлено из Домена VashDomen.com

Если вы увидели это предупреждение при тестировании почтового скрипта PHP, это может означать одно из следующих:

  • Ваша SPF-запись не включена. Вы можете найти инструкции по её добавлению здесь (англ.).
  • Вы отправили электронное письмо с адреса, который не существует или не принадлежит вам. Убедитесь, что вы используете действительные данные аутентификации SMTP.

Сообщения Попадают в Спам

Есть несколько причин, по которым сообщения PHP могут попадать в спам. Вот некоторые из самых распространённых:

  • Тема сообщения, вводящая в заблуждение или похожая на спам. Например, когда вы указываете одно слово: «тест» или «тестирование», «привет», «срочно» или что-то подобное. Убедитесь, что ваша тема чётко отображает суть сообщения.
  • Вы используете неправильный адрес отправителя и ваше сообщение отфильтровывается как спам. Такая мера безопасности направлена на борьбу со спуфингом и мошенничеством.
  • Вы используете слова, которые работают как триггеры для фильтрации спама. В эту категорию входят такие фразы, как «отличное предложение», «нажмите здесь», «специальная акция», «это не спам» и т. д. Попробуйте изменить содержание сообщения, чтобы проверить, так ли это.
  • В вашем списке рассылки нет кнопки «Отписаться от рассылки«. Когда много людей сообщают о ваших письмах как о спаме, вам будет сложно избежать спам-фильтра. Наличие кнопки отказа от подписки — отличный способ предотвратить это и вызвать больше доверия у ваших читателей.

Заключение

Теперь вы знаете, как происходит отправка email с PHP, а также, как использовать PHPMailer для отправки писем с аутентификацией SMTP. Не смотря на то, что в этом руководстве представлены базовые примеры, тот же синтаксис можно использовать в разработке контактной формы и других расширений для вашего сайта.

Для более подробной информации не забудьте посетить страницу проекта PHPMailer. Если у вас есть какие-либо советы, рекомендации или идеи, мы будем рады услышать их в разделе комментариев ниже.

Author

Елена имеет профессиональное техническое образование в области информационных технологий и опыт программирования на разных языках под разные платформы и системы. Более 10 лет посвятила сфере веб, работая с разными CMS, такими как: Drupal, Joomla, Magento и конечно же наиболее популярной в наши дни системой управления контентом – WordPress. Её статьи всегда технически выверены и точны, будь то обзор для WordPress или инструкции по настройке вашего VPS сервера.

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

А вот еще интересные материалы:

  • Яшка сломя голову остановился исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного где ошибка
  • Php mail не отправляет письма как увидеть ошибку
  • Php json обработка ошибок