PHP - отправка писем с использованием PHP
PHP должен быть правильно настроен в php.iniфайл с подробной информацией о том, как ваша система отправляет электронную почту. Откройте файл php.ini, доступный в/etc/ каталог и найдите раздел, озаглавленный [mail function].
Пользователи Windows должны убедиться, что предоставлены две директивы. Первый называется SMTP, который определяет адрес вашего почтового сервера. Второй называется sendmail_from, который определяет ваш собственный адрес электронной почты.
Конфигурация для Windows должна выглядеть примерно так -
[mail function]
; For Win32 only.
SMTP = smtp.secureserver.net
; For win32 only
sendmail_from = [email protected]
Пользователям Linux просто нужно сообщить PHP о местонахождении их sendmailприменение. Путь и любые желаемые параметры должны быть указаны в директиве sendmail_path.
Конфигурация для Linux должна выглядеть примерно так -
[mail function]
; For Win32 only.
SMTP =
; For win32 only
sendmail_from =
; For Unix only
sendmail_path = /usr/sbin/sendmail -t -i
Теперь вы готовы к работе -
Отправка обычного текстового сообщения электронной почты
PHP использует mail()функция отправки электронного письма. Эта функция требует трех обязательных аргументов, которые определяют адрес электронной почты получателя, тему сообщения и фактическое сообщение, кроме того, есть еще два дополнительных параметра.
mail( to, subject, message, headers, parameters );
Вот описание каждого параметра.
Старший Нет | Параметр и описание |
---|---|
1 | to Необходимые. Определяет получателя / получателей электронного письма |
2 | subject Необходимые. Задает тему электронного письма. Этот параметр не может содержать символы новой строки. |
3 | message Необходимые. Определяет сообщение для отправки. Каждую строку следует разделять знаком LF (\ n). Строки не должны превышать 70 символов. |
4 | headers Необязательный. Задает дополнительные заголовки, например From, Cc и Bcc. Дополнительные заголовки должны быть разделены CRLF (\ r \ n) |
5 | parameters Необязательный. Задает дополнительный параметр для программы отправки почты |
Как только функция mail вызывается, PHP попытается отправить электронное письмо, тогда оно вернет true в случае успеха или false в случае неудачи.
В качестве первого аргумента функции mail () в списке, разделенном запятыми, можно указать нескольких получателей.
Отправка электронной почты в формате HTML
Когда вы отправляете текстовое сообщение с помощью PHP, все содержимое будет рассматриваться как простой текст. Даже если вы включите HTML-теги в текстовое сообщение, оно будет отображаться как простой текст, а HTML-теги не будут отформатированы в соответствии с синтаксисом HTML. Но PHP предоставляет возможность отправлять HTML-сообщение как фактическое HTML-сообщение.
При отправке сообщения электронной почты вы можете указать версию Mime, тип содержимого и набор символов для отправки электронного письма в формате HTML.
пример
Следующий пример отправит сообщение электронной почты в формате HTML на адрес [email protected], скопировав его на адрес [email protected]. Вы можете закодировать эту программу таким образом, чтобы она получала весь контент от пользователя, а затем отправляла электронное письмо.
<html>
<head>
<title>Sending HTML email using PHP</title>
</head>
<body>
<?php
$to = "[email protected]";
$subject = "This is subject";
$message = "<b>This is HTML message.</b>";
$message .= "<h1>This is headline.</h1>";
$header = "From:[email protected] \r\n";
$header .= "Cc:[email protected] \r\n";
$header .= "MIME-Version: 1.0\r\n";
$header .= "Content-type: text/html\r\n";
$retval = mail ($to,$subject,$message,$header);
if( $retval == true ) {
echo "Message sent successfully...";
}else {
echo "Message could not be sent...";
}
?>
</body>
</html>
Отправка вложений по электронной почте
Чтобы отправить электронное письмо со смешанным содержанием, необходимо установить Content-type заголовок в multipart/mixed. Затем можно указать разделы текста и вложения вboundaries.
Граница начинается с двух дефисов, за которыми следует уникальный номер, который не может отображаться в части сообщения электронной почты. Функция PHPmd5()используется для создания 32-значного шестнадцатеричного числа для создания уникального числа. Последняя граница, обозначающая последний раздел электронного письма, также должна заканчиваться двумя дефисами.
<?php
// request variables // important
$from = $_REQUEST["from"];
$emaila = $_REQUEST["emaila"];
$filea = $_REQUEST["filea"];
if ($filea) {
function mail_attachment ($from , $to, $subject, $message, $attachment){
$fileatt = $attachment; // Path to the file
$fileatt_type = "application/octet-stream"; // File Type
$start = strrpos($attachment, '/') == -1 ?
strrpos($attachment, '//') : strrpos($attachment, '/')+1;
$fileatt_name = substr($attachment, $start,
strlen($attachment)); // Filename that will be used for the
file as the attachment
$email_from = $from; // Who the email is from
$subject = "New Attachment Message";
$email_subject = $subject; // The Subject of the email
$email_txt = $message; // Message that the email has in it
$email_to = $to; // Who the email is to
$headers = "From: ".$email_from;
$file = fopen($fileatt,'rb');
$data = fread($file,filesize($fileatt));
fclose($file);
$msg_txt="\n\n You have recieved a new attachment message from $from";
$semi_rand = md5(time());
$mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";
$headers .= "\nMIME-Version: 1.0\n" . "Content-Type: multipart/mixed;\n" . "
boundary=\"{$mime_boundary}\"";
$email_txt .= $msg_txt;
$email_message .= "This is a multi-part message in MIME format.\n\n" .
"--{$mime_boundary}\n" . "Content-Type:text/html;
charset = \"iso-8859-1\"\n" . "Content-Transfer-Encoding: 7bit\n\n" .
$email_txt . "\n\n";
$data = chunk_split(base64_encode($data));
$email_message .= "--{$mime_boundary}\n" . "Content-Type: {$fileatt_type};\n" .
" name = \"{$fileatt_name}\"\n" . //"Content-Disposition: attachment;\n" .
//" filename = \"{$fileatt_name}\"\n" . "Content-Transfer-Encoding:
base64\n\n" . $data . "\n\n" . "--{$mime_boundary}--\n";
$ok = mail($email_to, $email_subject, $email_message, $headers);
if($ok) {
echo "File Sent Successfully.";
unlink($attachment); // delete a file after attachment sent.
}else {
die("Sorry but the email could not be sent. Please go back and try again!");
}
}
move_uploaded_file($_FILES["filea"]["tmp_name"],
'temp/'.basename($_FILES['filea']['name']));
mail_attachment("$from", "[email protected]",
"subject", "message", ("temp/".$_FILES["filea"]["name"]));
}
?>
<html>
<head>
<script language = "javascript" type = "text/javascript">
function CheckData45() {
with(document.filepost) {
if(filea.value ! = "") {
document.getElementById('one').innerText =
"Attaching File ... Please Wait";
}
}
}
</script>
</head>
<body>
<table width = "100%" height = "100%" border = "0"
cellpadding = "0" cellspacing = "0">
<tr>
<td align = "center">
<form name = "filepost" method = "post"
action = "file.php" enctype = "multipart/form-data" id = "file">
<table width = "300" border = "0" cellspacing = "0"
cellpadding = "0">
<tr valign = "bottom">
<td height = "20">Your Name:</td>
</tr>
<tr>
<td><input name = "from" type = "text"
id = "from" size = "30"></td>
</tr>
<tr valign = "bottom">
<td height = "20">Your Email Address:</td>
</tr>
<tr>
<td class = "frmtxt2"><input name = "emaila"
type = "text" id = "emaila" size = "30"></td>
</tr>
<tr>
<td height = "20" valign = "bottom">Attach File:</td>
</tr>
<tr valign = "bottom">
<td valign = "bottom"><input name = "filea"
type = "file" id = "filea" size = "16"></td>
</tr>
<tr>
<td height = "40" valign = "middle"><input
name = "Reset2" type = "reset" id = "Reset2" value = "Reset">
<input name = "Submit2" type = "submit"
value = "Submit" onClick = "return CheckData45()"></td>
</tr>
</table>
</form>
<center>
<table width = "400">
<tr>
<td id = "one">
</td>
</tr>
</table>
</center>
</td>
</tr>
</table>
</body>
</html>