PHP 8.4.2 Released!

imap_mail_compose

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

imap_mail_composeErzeugt eine MIME-Nachricht aus Kopf- und Nachrichtenelementen

Beschreibung

imap_mail_compose(array $envelope, array $bodies): string|false

Erzeugt eine MIME-konforme Nachricht aus den in envelope gegebenen Kopfelementen und den Nachrichtenteilen aus bodies.

Parameter-Liste

envelope

Ein assoziatives Array von Kopfzeilenfeldern. Gültige Schlüssel sind: "remail", "return_path", "date", "from", "reply_to", "in_reply_to", "subject", "to", "cc", "bcc" und "message_id", die die jeweiligen Kopfzeilen zum angegebenen String definieren. Um zusätzliche Kopfzeilen zu definieren, kann der Schlüssel "custom_headers" verwendet werden, der ein Array von anderen Kopfzeilen erwartet, z. B. ["User-Agent: Mein Mail-Client"]).

bodies

Ein Array mit dem Textkörper. Das erste Element des Arrays ist der zentrale Teil der Nachricht. Nur wenn er vom Typ TYPEMULTIPART ist, werden die weiteren Elemente verarbeitet. Die verarbeiteten Elemente bilden die Teile des Körpers.

Der Aufbau des Körper-Arrays
Schlüssel Typ Beschreibung
type int Der MIME-Typ. Entweder TYPETEXT (Standard), TYPEMULTIPART, TYPEMESSAGE, TYPEAPPLICATION, TYPEAUDIO, TYPEIMAGE, TYPEMODEL oder TYPEOTHER.
encoding int Das Content-Transfer-Encoding. Entweder ENC7BIT (Standard), ENC8BIT, ENCBINARY, ENCBASE64, ENCQUOTEDPRINTABLE oder ENCOTHER.
charset string Der Zeichensatz-Parameter des MIME-Typs.
type.parameters array Ein assoziatives Array von Content-Type-Parameternamen und deren Werten.
subtype string Der MIME-Subtyp, z. B. 'jpeg' für TYPEIMAGE.
id string Die Content-ID.
description string Die Content-Description.
disposition.type string Die Content-Disposition, z. B. 'attachment'.
disposition array Ein assoziatives Array von Content-Disposition-Parameternamen und deren Werten.
contents.data string Der Inhalt.
lines int Die Größe des Inhalts in Zeilen.
bytes int Die Größe des Inhalts in Bytes.
md5 string Die MD5-Prüfsumme des Inhalts.

Rückgabewerte

Gibt eine MIME-konforme Nachricht als String zurück. Bei einem Fehler wird false zurückgegeben.

Beispiele

Beispiel #1 imap_mail_compose()-Beispiel

<?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));

?>

add a note

User Contributed Notes 5 notes

up
5
jvandeweghe at kipsu dot com
7 years ago
The custom_headers envelope documentation is misleading. Its not actually an "associative array", its a regular array of headers.

This is wrong:

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

This is right:

<?php
$envelope
= [
//...
"custom_headers" => [
"X-SES-CONFIGURATION-SET: example",
"X-SES-MESSAGE-TAGS: emailType=example"
]
];
?>
up
3
prices at dflytech dot com
22 years ago
The documentation above does not mention that you can use the index ["charset"] to set the character set of the messsage part.

Example:

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

to send a message in Russian-koi8.

Scott =)
up
3
Los Olvidados
21 years ago
If you wish to send the output of this function, simply use it for the headers argument of imap_mail() or mail(). Keep in mind that those functions set the To: and Subject: headers, so including them in the envelope will create double entries.
up
2
thomas dot hebinck at digionline dot de
21 years ago
It is a good idea to set the date header:
$envelope['date']=date('r');
up
2
Guido
16 years ago
For some email clients its necessary first to start with the body text and end with the attachment(s). Otherwise all the parts end up in attachments, also the body text (took a while to find this).

So example #1 (above) should be switched over, like:

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