2024 年 PHP Conference Japan

imap_mail_compose

(PHP 4, PHP 5, PHP 7, PHP 8)

imap_mail_compose根據指定的信封和主體區段建立 MIME 訊息

說明

imap_mail_compose(陣列 $envelope, 陣列 $bodies): 字串|false

根據指定的 envelopebodies 區段建立 MIME 訊息。

參數

envelope

標頭欄位的關聯式陣列。有效的鍵值包含:"remail""return_path""date""from""reply_to""in_reply_to""subject""to""cc""bcc""message_id",這些鍵值會將各自的訊息標頭設定為指定的 字串。要設定額外的標頭,可以使用 "custom_headers" 鍵值,它需要一個包含這些標頭的陣列,例如 ["User-Agent: My Mail Client"]

bodies

一個索引式陣列,包含訊息的本文。第一個本文是訊息的主要本文;只有當它的類型為 TYPEMULTIPART 時,才會處理後續的本文;這些本文構成部件的本文。

本文陣列結構
鍵值 類型 說明
type int MIME 類型。其中一個:TYPETEXT(預設)、TYPEMULTIPARTTYPEMESSAGETYPEAPPLICATIONTYPEAUDIOTYPEIMAGETYPEMODELTYPEOTHER
encoding int Content-Transfer-Encoding。其中一個:ENC7BIT(預設)、ENC8BITENCBINARYENCBASE64ENCQUOTEDPRINTABLEENCOTHER
charset 字串 MIME 類型的字元集參數。
type.parameters 陣列 一個包含 Content-Type 參數名稱及其值的關聯式 陣列
subtype 字串 MIME 子類型,例如 TYPEIMAGE'jpeg'
id 字串 Content-ID
description 字串 Content-Description
disposition.type 字串 Content-Disposition,例如 'attachment'
disposition 陣列 一個包含 Content-Disposition 參數名稱及其值的關聯式 陣列
contents.data 字串 有效負載。
lines int 有效負載的大小(以行計)。
bytes int 有效負載的大小(以位元組計)。
md5 字串 有效負載的 MD5 校驗和。

回傳值

字串 形式返回 MIME 訊息,如果失敗則返回 false

範例

範例 #1 imap_mail_compose() 範例

<?php

$envelope
["from"]= "joe@example.com";
$envelope["to"] = "foo@example.com";
$envelope["cc"] = "bar@example.com";

$part1["type"] = TYPEMULTIPART;
$part1["subtype"] = "mixed";

$filename = "/tmp/imap.c.gz";
$fp = fopen($filename, "r");
$contents = fread($fp, filesize($filename));
fclose($fp);

$part2["type"] = TYPEAPPLICATION;
$part2["encoding"] = ENCBINARY;
$part2["subtype"] = "octet-stream";
$part2["description"] = basename($filename);
$part2["contents.data"] = $contents;

$part3["type"] = TYPETEXT;
$part3["subtype"] = "plain";
$part3["description"] = "description3";
$part3["contents.data"] = "contents.data3\n\n\n\t";

$body[1] = $part1;
$body[2] = $part2;
$body[3] = $part3;

echo
nl2br(imap_mail_compose($envelope, $body));

?>

新增註釋

使用者貢獻的註釋 5 則註釋

jvandeweghe at kipsu dot com
7 年前
custom_headers 信封的說明文件有誤導性。它實際上不是一個「關聯式陣列」,而是一個普通的標頭陣列。

這是錯誤的

<?php
$envelope
= [
//...
"custom_headers" => [
"X-SES-CONFIGURATION-SET" => "example",
"X-SES-MESSAGE-TAGS" => "emailType=example"
]
];
?>

這是正確的

<?php
$envelope
= [
//...
"custom_headers" => [
"X-SES-CONFIGURATION-SET: example",
"X-SES-MESSAGE-TAGS: emailType=example"
]
];
?>
prices at dflytech dot com
22 年前
上述文件沒有提到您可以使用索引 ["charset"] 來設定訊息部分的字元集。

範例

$part1["type"]= "TEXT";
$part1["subtype"]="PLAIN";
$part1["charset"] = "koi8-r";

以俄語-koi8 編碼傳送訊息。

Scott =)
Los Olvidados
21 年前
如果您想傳送此函式的輸出,只需將其用於 imap_mail() 或 mail() 的標頭參數即可。請記住,這些函式會設定 To: 和 Subject: 標頭,因此將它們包含在信封中會產生重複的項目。
thomas dot hebinck at digionline dot de
21 年前
設定日期標頭是個好主意
$envelope['date']=date('r');
Guido
16 年前
對於某些電子郵件用戶端來說,必須先從內文開始,最後以附件結束。否則所有部分都會變成附件,包括內文(找到這個問題花了一段時間)。

因此,範例 #1(上方)應該像這樣切換

$body[1] = $part1;
$body[2] = $part3;
$body[3] = $part2;
To Top