Birthday Reminders for August

How to Send Email using PHP mail() Function

PHP mail is the built in PHP function that is used to send emails from PHP scripts.

The mail function accepts the following parameters:

  • Email address
  • Subject
  • Message
  • CC or BC email addresses
    • It’s a cost effective way of notifying users on important events.
    • Let users contact you via email by providing a contact us form on the website that emails the provided content.
    • Developers can use it to receive system errors by email
    • You can use it to email your newsletter subscribers.
    • You can use it to send password reset links to users who forget their passwords
    • You can use it to email activation/confirmation links. This is useful when registering users and verifying their email addresses

    In this tutorial, you will learn-

    Why/When to use the mail PHP

    Sending mail using PHP

    The PHP mail function has the following basic syntax

    • “$to_email_address” is the email address of the mail recipient
    • “$subject” is the email subject
    • “$message” is the message to be sent.
    • “[$headers]” is optional, it can be used to include information such as CC, BCC
      • CC is the acronym for carbon copy. It’s used when you want to send a copy to an interested person i.e. a complaint email sent to a company can also be sent as CC to the complaints board.
      • BCC is the acronym for blind carbon copy. It is similar to CC. The email addresses included in the BCC section will not be shown to the other recipients.

      Simple Mail Transmission Protocol (SMTP)

      PHP mailer uses Simple Mail Transmission Protocol (SMTP) to send mail.

      On a hosted server, the SMTP settings would have already been set.

      The SMTP mail settings can be configured from “php.ini” file in the PHP installation folder.

      Configuring SMTP settings on your localhost Assuming you are using xampp on windows, locate the “php.ini” in the directory “C:\xampp\php”.

      • Open it using notepad or any text editor. We will use notepad in this example. Click on the edit menu

      How to MAIL using PHP or Phpmailer

      How to MAIL using PHP or Phpmailer

      How to MAIL using PHP or Phpmailer

      How to MAIL using PHP or Phpmailer

      • Locate the entries
        • [mail function]
        • ; XAMPP: Don’t remove the semi column if you want to work with an SMTP Server like Mercury
        • ; SMTP = localhost
        • ; smtp_port = 25
        • Remove the semi colons before SMTP and smtp_port and set the SMTP to your smtp server and the port to your smtp port. Your settings should look as follows
          • SMTP = smtp.example.com
          • smtp_port = 25
          • Notethe SMTP settings can be gotten from your web hosting providers.
          • If the server requires authentication, then add the following lines.
            • auth_username = example_username@example.com
            • auth_password = example_password
            • Save the new changes.
            • Restart Apache server.

            PHP Mail Example

            Let’s now look at an example that sends a simple mail.

            Note: the above example only takes the 4 mandatory parameters.

            You should replace the above fictitious email address with a real email address.

            Sanitizing email user inputs

            The above example uses hard coded values in the source code for the email address and other details for simplicity.

            Let’s assume you have to create a contact us form for users fill in the details and then submit.

            • Users can accidently or intentional inject code in the headers which can result in sending spam mail
            • To protect your system from such attacks, you can create a custom function that sanitizes and validates the values before the mail is sent.

            Let’s create a custom function that validates and sanitizes the email address using the filter_var built in function.

            Filter_var function The filter_var function is used to sanitize and validate the user input data.

            It has the following basic syntax.

            • “filter_var(…)” is the validation and sanitization function
            • “$field” is the value of the field to be filtered.
            • “SANITIZATION TYPE” is the type of sanitization to be performed on the field such as;
              • FILTER_VALIDATE_EMAIL – it returns true for valid email addresses and false for invalid email addresses.
              • FILTER_SANITIZE_EMAIL – it removes illegal characters from email addresses. info\@domain.(com) returns info@domain.com.
              • FILTER_SANITIZE_URL – it removes illegal characters from URLs. http://www.example@.comé returns >http://www.example@.com
              • FILTER_SANITIZE_STRING – it removes tags from string values. am bold becomes am bold.

              The code below implements uses a custom function to send secure mail.

               else < return false; >> $to_email = 'name @ company . com'; $subject = 'Testing PHP Mail'; $message = 'This mail is sent using the PHP mail '; $headers = 'From: noreply @ company. com'; //check if the email address is invalid $secure_check $secure_check = sanitize_my_email($to_email); if ($secure_check == false) < echo "Invalid input"; >else < //send email mail($to_email, $subject, $message, $headers); echo "This email is sent using PHP Mail"; >?>

              Secure Mail

              Emails can be intercepted during transmission by unintended recipients.

              This can exposure the contents of the email to unintended recipients.

              Secure mail solves this problem by transmitting emails via Hypertext Transfer Protocol Secure (HTTPS).

              HTTPS encrypts messages before sending them.

              Summary

              • The PHP built in function mail() is used to send mail from PHP scripts
              • Validation and sanitization checks on the data are essential to sending secure mail
              • The PHP built in function filter_var() provides an easy to use and efficient way of performing data sanitization and validation

              Источник

              mail

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

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

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

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

              Если передан массив, то его ключи будут именами заголовка, а значения значениями.

              Замечание:

              До PHP 5.4.42 и 5.5.27, параметр additional_headers не имел защиты от инъекции. Так что пользователи должны удостовериться, что передаваемые заголовки безопасны и содержат только заголовки. т.е. не содержат несколько переводов строк подряд, что стартует тело сообщения.

              Замечание:

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

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

              Замечание:

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

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

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

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

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

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

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

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

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

              Версия Описание
              7.2.0 Параметр additional_headers может принимать значения типа массив.

              Примеры

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

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

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

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

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

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

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

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

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

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

              В этом примере посылается то же письмо, что и в примере выше, но дополнительные заголовки задаются массивом (доступно с PHP 7.2.0).

              $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 );
              ?>

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

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

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

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

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

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

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


              Here are the birthdays upcoming in August!

              Person Day Month Year
              Johny 10th August 1970
              Sally 17th August 1973



              ‘ ;

              // Для отправки HTML-письма должен быть установлен заголовок Content-type
              $headers = ‘MIME-Version: 1.0’ . «\r\n» ;
              $headers .= ‘Content-type: text/html; charset=iso-8859-1’ . «\r\n» ;

              // Дополнительные заголовки
              $headers [] = ‘To: Mary , Kelly ‘ ;
              $headers [] = ‘From: Birthday Reminder ‘ ;
              $headers [] = ‘Cc: birthdayarchive@example.com’ ;
              $headers [] = ‘Bcc: birthdaycheck@example.com’ ;

              // Отправляем
              mail ( $to , $subject , $message , implode ( «\r\n» , $headers ));
              ?>

              Замечание:

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

              Примечания

              Замечание:

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

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

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

              Замечание:

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

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

              Смотрите также

              Источник

              Читайте также:  Color in javascript alert
Оцените статью