Поиск…


параметры

параметр подробности
string $to Адрес электронной почты получателя
string $subject Строка темы
string $message Тело письма
string $additional_headers Необязательно: заголовки для добавления в электронную почту
string $additional_parameters Необязательно: аргументы для перехода к настроенному приложению отправки почты в командной строке

замечания

E-Mail Я отправляю через свой сценарий, который никогда не приходит. Что я должен делать?

  • Убедитесь, что вы включили отчет об ошибках, чтобы увидеть какие-либо ошибки.

  • Если у вас есть доступ к файлам журнала ошибок PHP, проверьте их.

  • Правильно ли настроена команда mail() на вашем сервере ? (Если вы находитесь на общедоступном хостинге, вы ничего здесь не можете изменить.)

  • Если E-Mail просто исчезает, запустите учетную запись E-Mail с помощью службы freemail, в которой есть спам-папка (или используйте учетную запись электронной почты, в которой нет фильтрации спама вообще). Таким образом, вы можете увидеть, не отправляется ли E-Mail или отправляется, но фильтруется как спам.

  • Вы проверили адрес «from:», который вы использовали для сообщений «отправлено отправителю»? Вы также можете настроить отдельный адрес отказов для сообщений об ошибках.

E-Mail, который я отправляю, фильтруется как спам. Что я должен делать?

  • Адрес отправителя («От») относится к домену, который выполняется на сервере, на который вы отправляете E-Mail? Если нет, измените это.

    Никогда не используйте адреса отправителя, такие как [email protected] . Используйте reply-to если вам нужны ответы, чтобы получить другой адрес.

  • Ваш сервер включен в черный список? Это возможность, когда вы находитесь на совместном хостинге, когда соседи ведут себя плохо. У большинства поставщиков черного списка, таких как Spamhaus , есть инструменты, позволяющие вам искать IP-адрес вашего сервера. Существуют также сторонние инструменты, такие как MX Toolbox.

  • Некоторые установки PHP требуют установки пятого параметра в mail () для добавления адреса отправителя. Посмотрите, может ли это иметь место для вас.

  • Если все остальное терпит неудачу, рассмотрите возможность использования электронной почты, как-услуг , таких как Mailgun , SparkPost , Amazon SES , MailJet , SendinBlue или SendGrid -Чтобы назвать несколько, вместо этого. Все они имеют API, которые можно вызвать с помощью PHP.

Отправка электронной почты. Основы, подробная информация и полный пример.

Типичное письмо имеет три основных компонента:

  1. Получатель (представленный как адрес электронной почты)
  2. Предмет
  3. Тело сообщения

Отправка почты в PHP может быть такой же простой, как вызов встроенной функции mail() . mail() принимает до пяти параметров, но первые три - все, что требуется для отправки электронной почты (хотя обычно используются четыре параметра, как будет показано ниже). Первые три параметра:

  1. Адрес электронной почты получателя (строка)
  2. Тема электронной почты (строка)
  3. Тело письма (строка) (например, содержимое электронной почты)

Минимальный пример будет похож на следующий код:

mail('[email protected]', 'Email Subject', 'This is the email message body');

Простой пример выше хорошо работает в ограниченных обстоятельствах, таких как hardcoding оповещение по электронной почте для внутренней системы. Однако, как правило, данные передаются в качестве параметров для mail() в переменных, чтобы сделать код более понятным и простым в управлении (например, динамическое построение электронной почты из представления формы).

Кроме того, mail() принимает четвертый параметр, который позволяет вам добавлять дополнительные почтовые заголовки с вашей электронной почтой. Эти заголовки могут позволить вам установить:

  • From имени и адреса электронной почты пользователь увидит
  • Reply-To адрес электронной почты, ответ пользователя будет отправлен
  • дополнительные заголовки, отличные от стандартов, такие как X-Mailer которые могут сообщить получателю, что это письмо было отправлено через PHP
$to      = '[email protected]';             // Could also be $to      = $_POST['recipient'];  
$subject = 'Email Subject';                     // Could also be $subject = $_POST['subject'];  
$message = 'This is the email message body';    // Could also be $message = $_POST['message'];  
$headers = implode("\r\n", [
    'From: John Conde <[email protected]>',
    'Reply-To: [email protected]',
    'X-Mailer: PHP/' . PHP_VERSION
]);

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

$fifth  = '[email protected]';

Хотя использование mail() может быть довольно надежным, никоим образом не гарантируется, что электронное письмо будет отправлено при вызове mail() . Чтобы узнать, есть ли потенциальная ошибка при отправке электронной почты, вы должны зафиксировать возвращаемое значение из mail() . TRUE будет возвращен, если почта была успешно принята к доставке. В противном случае вы получите FALSE .

$result = mail($to, $subject, $message, $headers, $fifth);

ПРИМЕЧАНИЕ . Хотя mail() может возвращать TRUE , это не означает, что письмо было отправлено или что письмо будет получено получателем. Это означает, что почта успешно была успешно передана почтовой системе вашей системы.

Если вы хотите отправить HTML-письмо, вам не нужно делать больше работы. Вам нужно:

  1. Добавьте заголовок MIME-Version
  2. Добавить заголовок Content-Type
  3. Убедитесь, что ваш почтовый контент - HTML
$to      = '[email protected]';                            
$subject = 'Email Subject';                                     
$message = '<html><body>This is the email message body</body></html>';       
$headers = implode("\r\n", [
    'From: John Conde <[email protected]>',
    'Reply-To: [email protected]',
    'MIME-Version: 1.0',
    'Content-Type: text/html; charset=ISO-8859-1',
    'X-Mailer: PHP/' . PHP_VERSION
]);

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

<?php

// Debugging tools. Only turn these on in your development environment.

error_reporting(-1);
ini_set('display_errors', 'On');
set_error_handler("var_dump");

// Special mail settings that can make mail less likely to be considered spam
// and offers logging in case of technical difficulties.

ini_set("mail.log", "/tmp/mail.log");
ini_set("mail.add_x_header", TRUE);

// The components of our email

$to      = '[email protected]';
$subject = 'Email Subject';
$message = 'This is the email message body';
$headers = implode("\r\n", [
    'From: [email protected]',
    'Reply-To: [email protected]',
    'X-Mailer: PHP/' . PHP_VERSION
]);

// Send the email

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

// Check the results and react accordingly

if ($result) {
  
    // Success! Redirect to a thank you page. Use the
    // POST/REDIRECT/GET pattern to prevent form resubmissions
    // when a user refreshes the page.
  
    header('Location: http://example.com/path/to/thank-you.php', true, 303);
    exit;
  
}
else {
  
    // Your mail was not sent. Check your logs to see if
    // the reason was reported there for you.
  
}

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

Официальная документация

Связанные вопросы переполнения стека

Альтернативные почтовые клиенты

Почтовые серверы

Похожие темы

Отправка HTML-адреса электронной почты с использованием почты ()

<?php
$to      = '[email protected]';
$subject = 'Sending an HTML email using mail() in PHP';
$message = '<html><body><p><b>This paragraph is bold.</b></p><p><i>This text is italic.</i></p></body></html>';

$headers = implode("\r\n", [
    "From: John Conde <[email protected]>",
    "Reply-To: [email protected]",
    "X-Mailer: PHP/" . PHP_VERSION,
    "MIME-Version: 1.0",
    "Content-Type: text/html; charset=UTF-8"
]);

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

Это не сильно отличается от отправки простого текстового сообщения . Ключевые отличительные черты, являющиеся телом контента, структурированы как документ HTML, и есть два дополнительных заголовка, которые должны быть включены, чтобы почтовый клиент знал, чтобы передать электронное письмо как HTML. Они есть:

  • MIME-версия: 1.0
  • Content-Type: text / html; кодировка = UTF-8

Отправка обычной текстовой электронной почты с помощью PHPMailer

Электронная почта основного текста

<?php

$mail = new PHPMailer();

$mail->From     = "[email protected]";
$mail->FromName = "Full Name";
$mail->addReplyTo("[email protected]", "Reply Address");
$mail->Subject  = "Subject Text";
$mail->Body     = "This is a sample basic text email using PHPMailer.";

if($mail->send()) {
    // Success! Redirect to a thank you page. Use the
    // POST/REDIRECT/GET pattern to prevent form resubmissions
    // when a user refreshes the page.
  
    header('Location: http://example.com/path/to/thank-you.php', true, 303);
    exit;
} 
else {
    echo "Mailer Error: " . $mail->ErrorInfo;
}

Добавление дополнительных получателей, получателей СС, получателей BCC

<?php

$mail = new PHPMailer();

$mail->From     = "[email protected]";
$mail->FromName = "Full Name";
$mail->addReplyTo("[email protected]", "Reply Address");
$mail->addAddress("[email protected]", "Recepient Name");
$mail->addAddress("[email protected]"); 
$mail->addCC("[email protected]");
$mail->addBCC("[email protected]");
$mail->Subject  = "Subject Text";
$mail->Body     = "This is a sample basic text email using PHPMailer.";

if($mail->send()) {
    // Success! Redirect to a thank you page. Use the
    // POST/REDIRECT/GET pattern to prevent form resubmissions
    // when a user refreshes the page.
  
    header('Location: http://example.com/path/to/thank-you.php', true, 303);
    exit;
} 
else {
    echo "Error: " . $mail->ErrorInfo;
}   

Отправка электронной почты с помощью приложения Использование почты ()

<?php

$to         = '[email protected]';
$subject    = 'Email Subject';
$message    = 'This is the email message body';

$attachment = '/path/to/your/file.pdf';
$content = file_get_contents($attachment);

/* Attachment content transferred in Base64 encoding
MUST be split into chunks 76 characters in length as
specified by RFC 2045 section 6.8. By default, the
function chunk_split() uses a chunk length of 76 with
a trailing CRLF (\r\n). The 76 character requirement
does not include the carriage return and line feed */
$content = chunk_split(base64_encode($content));

/* Boundaries delimit multipart entities. As stated
in RFC 2046 section 5.1, the boundary MUST NOT occur
in any encapsulated part. Therefore, it should be
unique. As stated in the following section 5.1.1, a
boundary is defined as a line consisting of two hyphens
("--"), a parameter value, optional linear whitespace,
and a terminating CRLF. */
$prefix     = "part_"; // This is an optional prefix
/* Generate a unique boundary parameter value with our
prefix using the uniqid() function. The second parameter
makes the parameter value more unique. */
$boundary   = uniqid($prefix, true);

// headers
$headers    = implode("\r\n", [
    'From: [email protected]',
    'Reply-To: [email protected]',
    'X-Mailer: PHP/' . PHP_VERSION,
    'MIME-Version: 1.0',
    // boundary parameter required, must be enclosed by quotes
    'Content-Type: multipart/mixed; boundary="' . $boundary . '"',
    "Content-Transfer-Encoding: 7bit",
    "This is a MIME encoded message." // message for restricted transports
]);

// message and attachment
$message    = implode("\r\n", [ 
    "--" . $boundary, // header boundary delimiter line
    'Content-Type: text/plain; charset="iso-8859-1"',
    "Content-Transfer-Encoding: 8bit",
    $message,
    "--" . $boundary, // content boundary delimiter line
    'Content-Type: application/octet-stream; name="RenamedFile.pdf"',
    "Content-Transfer-Encoding: base64",
    "Content-Disposition: attachment",
    $content,
    "--" . $boundary . "--" // closing boundary delimiter line
]);

$result = mail($to, $subject, $message, $headers); // send the email

if ($result) {
    // Success! Redirect to a thank you page. Use the
    // POST/REDIRECT/GET pattern to prevent form resubmissions
    // when a user refreshes the page.
  
    header('Location: http://example.com/path/to/thank-you.php', true, 303);
    exit;
}
else {
    // Your mail was not sent. Check your logs to see if
    // the reason was reported there for you.
}

Content-Transfer-Encodings

Доступные кодироаки 7Bit, 8bit, Двоичный, цитируемый-печать, base64, IETF-токены и х-токены. Из этих кодировок, когда заголовок имеет многостраничный Content-Type, Content-Transfer-Encoding не должно быть другим значением, отличным от 7bit , 8bit или двоичным, как указано в RFC 2045, раздел 6.4.

Наш пример выбирает 7-битную кодировку, которая представляет символы US-ASCII, для многочастного заголовка, потому что, как отмечено в разделе 6 RFC 2045, некоторые протоколы поддерживают только эту кодировку. Затем данные в границах могут быть закодированы по частям (RFC 2046, раздел 5.1). Этот пример делает именно это. Первая часть, содержащая текстовое / обычное сообщение, определяется как 8 бит, поскольку может потребоваться поддержка дополнительных символов. В этом случае используется набор символов Latin1 (iso-8859-1). Вторая часть - это вложение, и поэтому она определяется как base64-кодированное приложение / октет-поток. Поскольку base64 преобразует произвольные данные в 7-битный диапазон, его можно отправить по ограниченным транспортным средствам (RFC 2045, раздел 6.2).

Отправка электронной почты HTML с помощью PHPMailer

<?php

$mail = new PHPMailer();

$mail->From     = "[email protected]";
$mail->FromName = "Full Name";
$mail->addReplyTo("[email protected]", "Reply Address");
$mail->addAddress("[email protected]", "Recepient Name");
$mail->addAddress("[email protected]"); 
$mail->addCC("[email protected]");
$mail->addBCC("[email protected]");
$mail->Subject  = "Subject Text";
$mail->isHTML(true);
$mail->Body     = "<html><body><p><b>This paragraph is bold.</b></p><p><i>This text is italic.</i></p></body></html>";
$mail->AltBody = "This paragraph is not bold.\n\nThis text is not italic.";

if($mail->send()) {
    // Success! Redirect to a thank you page. Use the
    // POST/REDIRECT/GET pattern to prevent form resubmissions
    // when a user refreshes the page.
  
    header('Location: http://example.com/path/to/thank-you.php', true, 303);
    exit;
} 
else {
    echo "Error: " . $mail->ErrorInfo;
}   

Отправка электронной почты с помощью приложения с использованием PHPMailer

<?php

$mail = new PHPMailer();

$mail->From     = "[email protected]";
$mail->FromName = "Full Name";
$mail->addReplyTo("[email protected]", "Reply Address");
$mail->Subject  = "Subject Text";
$mail->Body     = "This is a sample basic text email with an attachment using PHPMailer.";

// Add Static Attachment
$attachment = '/path/to/your/file.pdf';
$mail->AddAttachment($attachment , 'RenamedFile.pdf');

// Add Second Attachment, run-time created. ie: CSV to be open with Excel
$csvHeader = "header1,header2,header3";
$csvData = "row1col1,row1col2,row1col3\nrow2col1,row2col2,row2col3";

$mail->AddStringAttachment($csvHeader ."\n" . $csvData, 'your-csv-file.csv', 'base64', 'application/vnd.ms-excel');

if($mail->send()) {
    // Success! Redirect to a thank you page. Use the
    // POST/REDIRECT/GET pattern to prevent form resubmissions
    // when a user refreshes the page.
  
    header('Location: http://example.com/path/to/thank-you.php', true, 303);
    exit;
} 
else {
    echo "Error: " . $mail->ErrorInfo;
}   

Отправка обычной текстовой электронной почты с помощью Sendgrid

Электронная почта основного текста

<?php

$sendgrid = new SendGrid("YOUR_SENDGRID_API_KEY");
$email    = new SendGrid\Email();

$email->addTo("[email protected]")
      ->setFrom("[email protected]")
      ->setSubject("Subject Text")
      ->setText("This is a sample basic text email using ");

$sendgrid->send($email);

Добавление дополнительных получателей, получателей СС, получателей BCC

<?php

$sendgrid = new SendGrid("YOUR_SENDGRID_API_KEY");
$email    = new SendGrid\Email();

$email->addTo("[email protected]")
      ->setFrom("[email protected]")
      ->setSubject("Subject Text")
      ->setHtml("<html><body><p><b>This paragraph is bold.</b></p><p><i>This text is italic.</i></p></body></html>");
      
$personalization = new Personalization();
$email = new Email("Recepient Name", "[email protected]");
$personalization->addTo($email);
$email = new Email("RecepientCC Name", "[email protected]");
$personalization->addCc($email);
$email = new Email("RecepientBCC Name", "[email protected]");
$personalization->addBcc($email);
$email->addPersonalization($personalization);
    
$sendgrid->send($email);

Отправка электронной почты с помощью приложения с помощью Sendgrid

<?php

$sendgrid = new SendGrid("YOUR_SENDGRID_API_KEY");
$email    = new SendGrid\Email();

$email->addTo("[email protected]")
      ->setFrom("[email protected]")
      ->setSubject("Subject Text")
      ->setText("This is a sample basic text email using ");
      
$attachment = '/path/to/your/file.pdf';
$content    = file_get_contents($attachment);
$content    = chunk_split(base64_encode($content));

$attachment = new Attachment();
$attachment->setContent($content);
$attachment->setType("application/pdf");
$attachment->setFilename("RenamedFile.pdf");
$attachment->setDisposition("attachment");
$email->addAttachment($attachment);

$sendgrid->send($email);


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow