Samira Radwan Ответов: 1

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


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

Пожалуйста, посоветуйте

Что я уже пробовал:

Вот html страница:
<pre><body>
	<form action="php_sendmail_upload2.php" method="post" name="form1" enctype="multipart/form-data">
	<table width="343" border="1">
		<tr>
		<td>To</td>
		<td><input name="txtTo" type="text" id="txtTo"></td> 
	</tr> 
	<tr>
		<td>Subject</td>
		<td><input name="txtSubject" type="text" id="txtSubject"></td>
	</tr>
	<tr>
		<td>Description</td>
		<td><textarea name="txtDescription" cols="30" rows="4" id="txtDescription"></textarea></td>
	</tr>
	<tr>
		<td>Form Name</td>
		<td><input name="txtFormName" type="text"></td>
	</tr>
	<tr>
	<tr>
		<td>Form Email</td>
		<td><input name="txtFormEmail" type="text"></td>
	</tr>
	<tr>
	  <td>Attachment</td>
	  <td><input name="fileAttach" type="file"></td>
	</tr>
	<tr>
		<td> </td>
		<td><input type="submit" name="Submit" value="Send"></td>
	</tr>
	</table>
	</form>
</body>



PHP-код:
<?PHP
	$strTo = $_POST["txtTo"];
	$strSubject = $_POST["txtSubject"];
	$strMessage = nl2br($_POST["txtDescription"]);

	//*** Uniqid Session ***//
	$strSid = md5(uniqid(time()));

	$strHeader = "";
	$strHeader .= "From: ".$_POST["txtFormName"]."<".$_POST["txtFormEmail"].">\nReply-To: ".$_POST["txtFormEmail"]."";

	$strHeader .= "MIME-Version: 1.0\n";
	$strHeader .= "Content-Type: multipart/mixed; boundary=\"".$strSid."\"\n\n";
	$strHeader .= "This is a multi-part message in MIME format.\n";

	$strHeader .= "--".$strSid."\n";
	$strHeader .= "Content-type: text/html; charset=utf-8\n";
	$strHeader .= "Content-Transfer-Encoding: 7bit\n\n";
	$strHeader .= $strMessage."\n\n";
	
	//*** Attachment ***//
	if($_FILES["fileAttach"]["name"] != "")
	{
		$strFilesName = $_FILES["fileAttach"]["name"];
		$strContent = chunk_split(base64_encode(file_get_contents($_FILES["fileAttach"]["tmp_name"]))); 
		$strHeader .= "--".$strSid."\n";
		$strHeader .= "Content-Type: application/octet-stream; name=\"".$strFilesName."\"\n"; 
		$strHeader .= "Content-Transfer-Encoding: base64\n";
		$strHeader .= "Content-Disposition: attachment; filename=\"".$strFilesName."\"\n\n";
		$strHeader .= $strContent."\n\n";
	}
	

	$flgSend = @mail($strTo,$strSubject,null,$strHeader);  // @ = No Show Error //

	if($flgSend)
	{
		echo "Mail send completed.";
	}
	else
	{
		echo "Cannot send mail.";
	}
?>

Richard MacCutchan

Удалите@, чтобы вы могли видеть любое сообщение об ошибке.

Samira Radwan

Это было полезно, спасибо.
Мне удалось отправить письмо, но я получаю его как все хешированное или зашифрованное!! ты хоть представляешь, почему? спасибо

Richard MacCutchan

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

1 Ответов

Рейтинг:
2

Jochen Arndt

Цитата:
Мне удалось отправить письмо, но я получаю его как все хешированное или зашифрованное!! ты хоть представляешь, почему?
Ваша почта неправильно сформирована. Вы можете проверить это, проверив полученный простой текст (как это показать, зависит от вашего почтового клиента; с Thunderbird и некоторыми другими клиентами можно использовать сочетание клавиш Ctrl+U).

Первая ошибка заключается в том, что вы помещаете все содержимое в заголовки и не имеете тела:
$flgSend = @mail($strTo,$strSubject,null,$strHeader);

Тогда нет эпилога (конечной границы).

Наконец, вы используете окончания строк "\n", в то время как электронная почта требует завершения строк CRLF. Обратите внимание, что это относится и к вашему $strMessage текст. Видеть PHP: почта-руководство пользователя[^]:
Цитата:
сообщение
Сообщение должно быть отправлено.
Каждая строка должна быть разделена CRLF (\r\n). Строки не должны превышать 70 символов.

Сделайте это так, как задумано, и создайте строки для заголовка и тела, а также используйте завершенные строки CRLF:
// Additional headers.
// Note that there is no need to use two new line sequences here. 
// It will be inserted by the mail() function in front of the body.
$strHeader = "MIME-Version: 1.0\r\n";
$strHeader .= "Content-Type: multipart/mixed; boundary=\"".$strSid."\"\r\n";

// For non-MIME compliant readers 
$strBody = "This is a multi-part message in MIME format.\r\n";

// The text part
$strBody .= "--".$strSid."\r\n";
$strBody .= "Content-type: text/html; charset=utf-8\r\n";
// It makes no sense to use 7bit with UTF-8!
// If you want to avoid 8bit, you have to encode the string
//  and set the decoding accordingly (e.g. quoted-printable).
$strBody .= "Content-Transfer-Encoding: 8bit\r\n\r\n";
// You must ensure that $strMessage is valid UTF-8 encoded HTML
//  and has CRLF terminated lines.
$strBody .= $strMessage."\r\n\r\n";

// Append additional content to $strBody here using also CRLF terminated lines
// ...

// The epilogue (trailing "--"). Anything beyond this is ignored.
$strBody .= "--".$strSid."--\r\n";

$flgSend = mail($strTo,$strSubject,$strBody,$strHeader);