tôi là một chút lo lắng nếu chức năng này sẽ gửi email có thể được công nhận một cách chính xác trên phần lớn các email và webmail khách hàng một cách cần, đặc biệt tôi quan tâm nhất về vấn đề này nghi ngờ:Đây có phải là cách chính xác để gửi email bằng PHP không?
- Are UTF -8 tờ khai và chấp trước được hình thành tốt?
- Tôi có cần sử dụng quoted_printable_decode() không? Nếu có, ở đâu?
- Content-Transfer-Encoding: 7 hoặc 8 bit? Tôi đã luôn luôn nhìn thấy 7 nhưng kể từ khi tôi đang gửi một thư được mã hóa UTF-8 tôi không chắc chắn.
- Tôi có nên sử dụng mb_send_mail() hoặc thư() là đủ?
EDIT: Tôi không biết tại sao nhưng mã không hiển thị đúng, tôi đã làm cho nó có sẵn @http://gist.github.com/104818
EDIT 2: Tôi nhận thức được lựa chọn thay thế khác (thư viện) cho xử lý email, nhưng vì lợi ích của sự tò mò và kiến thức của riêng tôi, tôi chỉ muốn biết liệu mã này có tốt hay không, hoặc nếu nó có lỗi.
function Email($name, $from, $to, $subject, $message, $bcc = null, $attachments = null)
{
ini_set('SMTP', 'localhost');
ini_set('sendmail_from', $from);
$name = filter_var($name, FILTER_SANITIZE_STRING);
$from = filter_var($from, FILTER_SANITIZE_EMAIL);
$subject = filter_var($subject, FILTER_SANITIZE_STRING);
$boundary = '_Boundary_' . md5(microtime(true) . mt_rand(0, PHP_INT_MAX));
$headers = array
(
'MIME-Version: 1.0',
'Content-Type: multipart/mixed; boundary="Mixed' . $boundary . '"',
'Date: ' . date('r', time()),
'From: "' . $name . '" <' . $from . '>',
'Reply-To: "' . $name . '" <' . $from . '>',
'Return-Path: "' . $name . '" <' . $from . '>',
'X-Mailer: PHP ' . phpversion(),
'X-Priority: 2',
'X-MSMail-Priority: High',
'X-Originating-IP: ' . $_SERVER['SERVER_ADDR'],
);
if (is_null($to) === false)
{
if (is_array($to) === false)
{
$to = explode(',', $to);
}
foreach ($to as $key => $value)
{
$to[$key] = filter_var($value, FILTER_SANITIZE_EMAIL);
}
$to = implode(', ', array_filter($to));
}
if (is_null($bcc) === false)
{
if (is_array($bcc) === false)
{
$bcc = explode(',', $bcc);
}
foreach ($bcc as $key => $value)
{
$bcc[$key] = filter_var($value, FILTER_SANITIZE_EMAIL);
}
$headers[] = 'BCC: ' . implode(', ', array_filter($bcc));
}
if (is_null($attachments) === false)
{
settype($attachments, 'array');
foreach ($attachments as $key => $value)
{
if (is_file($value) === true)
{
$attachments[$key] = array
(
'',
'--Mixed' . $boundary,
'Content-Type: application/octet-stream; name="' . basename($value) . '"',
'Content-Disposition: attachment; filename="' . basename($value) . '"',
'Content-Transfer-Encoding: base64',
'',
trim(chunk_split(base64_encode(file_get_contents($value)))),
);
$attachments[$key] = implode("\n", $attachments[$key]);
}
else
{
unset($attachments[$key]);
}
}
$attachments = implode("\n", $attachments) . "\n";
}
$message = array
(
'This is a multi-part message in MIME format.',
'',
'--Mixed' . $boundary,
'Content-Type: multipart/alternative; boundary="Alt' . $boundary . '"',
'',
'--Alt' . $boundary,
'Content-Type: text/plain; charset="UTF-8"',
'Content-Disposition: inline',
'Content-Transfer-Encoding: 8bit',
'',
trim(strip_tags($message, '<a>')),
'',
'--Alt' . $boundary,
'Content-Type: text/html; charset="UTF-8"',
'Content-Disposition: inline',
'Content-Transfer-Encoding: 8bit',
'',
trim($message),
'',
'--Alt' . $boundary . '--',
$attachments,
'--Mixed' . $boundary . '--',
);
if (@mail($to, stripslashes($subject), implode("\n", $message), implode("\n", $headers)) === true)
{
return true;
}
return false;
}
Câu trả lời tốt đẫm máu Mr Jones. Tôi hy vọng bạn nhận được tiền thưởng +1 – da5id
Tôi đồng ý, Zend_Mail có mọi thứ bạn cần và hơn thế nữa! Sử dụng thư viện được nhiều người phát triển, nó thường có ít lỗi hơn. – Kekoa
"Nếu bạn biết bạn sẽ không xử lý các tin nhắn nhiều byte (tiếng Nhật, tiếng Hàn, tiếng Trung, v.v ...) thì thư() là đủ." - Thư nào trong các ngôn ngữ khác, như tiếng Đức, tiếng Pháp, tiếng Bồ Đào Nha và tiếng Tây Ban Nha? Mail() vẫn đủ? –