我真的很难使用php mail()函数制作带附件的电子邮件,我已经成功附加了我的文件但是消息只是显示HTML和CSS代码而不是发送电子邮件正文消息:
这是我的代码:
$htmlbody = '
<!doctype html>
<html>
<head>
<title>Invoice</title>
<style>
.invoice-box{
background-color: rgb(244, 244, 244);
max-width:800px;
margin:auto;
padding:30px;
border:1px solid #eee;
box-shadow:0 0 10px rgba(0, 0, 0, .15);
font-size:16px;
line-height:24px;
font-family:"Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif;
color:#555;
border-color: #fe7100;
border-width: medium;
}
.invoice-box table{
width:100%;
line-height:inherit;
text-align:left;
}
.invoice-box table td{
padding:5px;
vertical-align:top;
}
.invoice-box table tr td:nth-child(2){
text-align:right;
}
.invoice-box table tr.top table td{
padding-bottom:20px;
}
.invoice-box table tr.top table td.title{
font-size:45px;
line-height:45px;
color:#333;
}
.invoice-box table tr.information table td{
padding-bottom:40px;
}
.invoice-box table tr.heading td{
background:#33665e;
border-bottom:1px solid #ddd;
font-weight:bold;
color: white;
}
.invoice-box table tr.details td{
padding-bottom:5px;
}
.invoice-box table tr.item td{
border-bottom:1px solid #eee;
}
.invoice-box table tr.item.last td{
border-bottom:none;
}
.invoice-box table tr.total td:nth-child(2){
border-top:2px solid #eee;
font-weight:bold;
}
@media only screen and (max-width: 600px) {
.invoice-box table tr.top table td{
width:100%;
display:block;
text-align:center;
}
.invoice-box table tr.information table td{
width:100%;
display:block;
text-align:center;
}
}
.block-garis{
width: 100%;
height: 3px;
background-color: #fe7100;
}
</style>
</head>
<body>
<div class="invoice-box">
<table cellpadding="0" cellspacing="0">
<tr class="top">
<td colspan="2">
<table>
<tr>
<td class="title">
<img src="https://4travelo.com/logo.png" style="width:100%; max-width:200px;">
</td>
<td>
Invoice #: '.$id.'<br>
Created: '.$tglbook.'<br>
Due: '.$timeexpiry.'
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td colspan="2"><div class="block-garis"></div></td>
</tr>
<tr class="information">
<td colspan="2">
<table>
<tr>
<td>
4travelo.<br>
Jl. Kebonsari Menanggal 2B<br>
Surabaya.
</td>
</tr>
</table>
</td>
</tr>
<tr class="heading">
<td>
Keterangan Hotel
</td>
<td>
</td>
</tr>
<tr class="details">
<td>
Nama Hotel
</td>
<td>
'.$hotelname.'
</td>
</tr>
<tr class="details">
<td>
Alamat Hotel
</td>
<td>
'.$alamat.'
</td>
</tr>
<tr class="details">
<td>
Checkin
</td>
<td>
'.$checkin.'
</td>
</tr>
<tr class="details">
<td>
Checkout
</td>
<td>
'.$checkout.'
</td>
</tr>
<tr class="heading">
<td>
Guest
</td>
<td>
</td>
</tr>
<tr class="item">
<td>
Guest Name
</td>
<td>
'.$paxesname.'
</td>
</tr>
<tr class="item">
<td>
Type Kamar
</td>
<td>
'.$room.'
</td>
</tr>
<tr class="item">
<td>
Include BF/Net
</td>
<td>
'.$meal.'
</td>
</tr>
<tr class="item">
<td>
Dewasa
</td>
<td>
'.$adult.'
</td>
</tr>
<tr class="item">
<td>
Anak - Anak
</td>
<td>
'.$child.'
</td>
</tr>
<tr class="heading">
<td>
Total
</td>
<td>
</td>
</tr>
<tr class="item">
<td>
Total
</td>
<td>
<b>Rp '.$payment.'</b>
</td>
</tr>
<tr>
<td> </td>
<td> </td>
</tr>
<tr>
<td> </td>
<td> </td>
</tr>
<tr>
<td> </td>
<td> </td>
</tr>
<tr style="font-size:10px; padding-top:50px;">
<td><b>Hotel cancelation policy :
<br>1. Pemesanan non refundable<br>
2. Tanggal inap & tipe kamar tidak dapat dirubah</b>
</td>
<td><b>our partner : </b> <br><img src="https://4travelo.com/hb.png" alt=""></td>
</tr>
<tr>
<td> </td>
<td style=""></td>
</tr>
</table>
</div>
</body>
</html>';
$to = $email; //Recipient Email Address
$subject = "Test email with attachment"; //Email Subject
$headers = "From: admin@4travelo.com\r\nReply-To: admin@4travelo.com";
$random_hash = md5(date('r', time()));
$headers .= "\r\nContent-Type: multipart/mixed;
boundary=\"PHP-mixed-".$random_hash."\"";
// Set your file path here
$attachment = chunk_split(base64_encode(file_get_contents('/home/travelo/public_html/4travelo.com/triomacan/4travelo_beta-2.0/document/'.$invoice.'.pdf')));
//define the body of the message.
$message = "--PHP-mixed-$random_hash\r\n"."Content-Type: multipart/alternative;
boundary=\"PHP-alt-$random_hash\"\r\n\r\n";
$message .= "--PHP-alt-$random_hash\r\n"."Content-Type: text/plain;
charset=\"iso-8859-1\"\r\n"."Content-Transfer-Encoding: 7bit\r\n\r\n";
//Insert the html message.
$message .= "$htmlbody";
$message .="\r\n\r\n--PHP-alt-$random_hash--\r\n\r\n";
//include attachment
$message .= "--PHP-mixed-$random_hash\r\n"."Content-Type: application/zip;
name=\"invoice.pdf\"\r\n"."Content-Transfer-Encoding:
base64\r\n"."Content-Disposition: attachment\r\n\r\n";
$message .= $attachment;
$message .= "/r/n--PHP-mixed-$random_hash--";
//send the email
$mail = mail( $to, $subject , $message, $headers, '-f admin@4travelo.com' );
echo $mail ? "Mail sent" : "Mail failed";
有人能帮助我吗?
答案 0 :(得分:2)
而不是
$message .= "--PHP-alt-$random_hash\r\n"."Content-Type: text/plain;
试
$message .= "--PHP-alt-$random_hash\r\n"."Content-Type: text/html;
答案 1 :(得分:0)
您的标题设置为multipart / mixed,请尝试整理它们:
$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
$headers .= 'From: My Name Here <noreply@example.co.uk>' . "\r\n";
同时将邮件中的内容类型更改为:
$message .= "--PHP-alt-$random_hash\r\n"."Content-Type: text/html;
以及其他任何地方
答案 2 :(得分:0)
我通常不是“尝试不同的包”类型响应的忠实粉丝,但我对PHP的mail()
函数做了一个例外。有更多无痛的解决方案可以避免您遇到的问题。我在过去的几年中使用过PHPMailer(https://github.com/PHPMailer/PHPMailer)取得了巨大的成功,但是还有其他几个,比如Swiftmailer。