imap_append

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

imap_appendHängt eine String-Nachricht an ein Postfach an

Beschreibung

imap_append(
    IMAP\Connection $imap,
    string $folder,
    string $message,
    ?string $options = null,
    ?string $internal_date = null
): bool

Der in message übergebene String wird als Nachricht an das Postfach folder angefügt.

Parameter-Liste

imap

Eine IMAP\Connection-Instanz.

folder

Der Name des Postfachs, siehe imap_open() für nähere Informationen

Warnung

Die Übergabe von nicht vertrauenswürdigen Daten an diesen Parameter ist unsicher,falls imap.enable_insecure_rsh nicht deaktiviert ist.

message

Die anzufügende Nachricht als String

Bei Verbindungen mit dem Cyrus-IMAP-Server ist es zwingend erforderlich, "\r\n" als Zeilenende zu verwenden. Mit einem einfachen "\n" schlägt die Operation fehl.

options

Wenn angegeben, werden die in options gesetzten Optionen auch ins Postfach folder geschrieben.

internal_date

Wenn dieser Parameter angegeben wird, wird das INTERNALDATE für die hinzugefügte Nachricht gesetzt. Der Parameter sollte ein Datumsstring sein, der den rfc2060-Spezifikationen für einen date_time-Wert entspricht.

Rückgabewerte

Gibt bei Erfolg true zurück. Bei einem Fehler wird false zurückgegeben.

Changelog

Version Beschreibung
8.1.0 Der Parameter imap erwartet nun eine IMAP\Connection-Instanz; vorher wurde eine gültige imap-Ressource erwartet.
8.0.0 options und internal_date sind jetzt nullable (akzeptieren den null-Wert).

Beispiele

Beispiel #1 imap_append()-Beispiel

<?php
$imap
= imap_open("{imap.example.org}INBOX.Drafts", "username", "password");

$check = imap_check($imap);
echo
"Anzahl der Nachrichten vor dem Anhängen: ". $check->Nmsgs . "\n";

imap_append($imap, "{imap.example.org}INBOX.Drafts"
, "From: me@example.com\r\n"
. "To: you@example.com\r\n"
. "Subject: test\r\n"
. "\r\n"
. "this is a test message, please ignore\r\n"
);

$check = imap_check($imap);
echo
"Anzahl der Nachrichten nach dem Anhängen: ". $check->Nmsgs . "\n";

imap_close($imap);
?>

add a note

User Contributed Notes 4 notes

up
19
rixsta at hotmail dot com
12 years ago
Hi,

As we have been struggling with this for some time I wanted to share how we got imap_append working properly with all MIME parts including attachments. If you are sending email and also wish to append the sent message to the Sent Items folder, I cannot think of an easier way to do this, as follows:

1) Use SwiftMailer to send the message via PHP.
$message = Swift_Message::newInstance("Subject goes here");
(then add from, to, body, attachments etc)
$result = $mailer->send($message);

2) When you construct the message in step 1) above save it to a variable as follows:

$msg = $message->toString(); (this creates the full MIME message required for imap_append()!! After this you can call imap_append like this:

imap_append($imap_conn,$mail_box,$msg."\r\n","\\Seen");

I hope this helps the readers, and prevents saves people from doing what we started doing - hand crafting the MIME messages :-0
up
10
Krzysiek
9 years ago
You can use PHPMailer ( https://github.com/PHPMailer/PHPMailer/ ) with imap.

<?php
// after creating content of mail you have to run preSend() - part of send() method
$mail->send();
// and you can get whole raw message with getSentMIMEMessage() method
imap_append($imap, $mailserver.'INBOX.Sent',$mail->getSentMIMEMessage(), "\\Seen");
up
5
kaminski at istori dot com
14 years ago
The date format string to use when creating $internal_date is 'd-M-Y H:i:s O'.
up
1
jab_creations at yahoo dot com
19 days ago
This function is how you take a sent message in your mail shell and place a copy of it in the remote mail server's sent folder.

It is however not intuitive and I struggled for a couple hours so I'm placing these notes here to spare others the aggravation. Some of the errors I encountered:

- Can't append to mailbox with such a name
- Internal date not correctly formatted

The second/folder parameter is not the string you might think it is (e.g. "Sent", "Inbox.Sent", etc). It is the connection information used by imap_open() which doesn't make sense as the connection is already open! Whatever, here is a basic example addressing those three errors:

<?php
$server
= '{mail.example.com:993/ssl/imap}INBOX.Sent';
$mail_connection_folder = imap_open($server, $user, $pass);

if (
$mail_connection)
{
$result = imap_append($mail_connection, $server, $message_string_raw, '\\Seen', date('d-M-Y H:i:s O'));
}
?>

I had been using the PHP Pear Mail extension which did a fantastic job with DMARC, SPF, DKIM, etc. However it's not well maintained and I couldn't figure out if it returns the email message string. The PHPMailer library (https://github.com/PHPMailer/PHPMailer) does return the message string:

<?php
//Skip to key parts:
$result = $mail->send();

if (
$result)
{
$message_string_raw = $mail->getSentMIMEMessage();
}
else {
/*error handling*/}
?>

Hopefully this will spare some folks a lot of aggravation.
To Top