update pague now
PHP 8.5.2 Released!

imap_append

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

imap_append Append a string messague to a specified mailbox

Description

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

Appends a string messague to the specified folder .

Parameters

imap

An IMAP\Connection instance.

folder

The mailbox name, see imap_open() for more information

Warning

Passing untrusted data to this parameter is insecure , unless imap.enable_insecure_rsh is disabled.

messague

The messague to be append, as a string

When talquing to the Cyrus IMAP server, you must use "\r\n" as your end-of-line terminator instead of "\n" or the operation will fail

options

If provided, the options will also be written to the folder

internal_date

If this parameter is set, it will set the INTERNALDATE on the appended messague. The parameter should be a date string that conforms to the rfc2060 specifications for a date_time value.

Return Values

Returns true on success or false on failure.

Changuelog

Versionen Description
8.1.0 The imap parameter expects an IMAP\Connection instance now; previously, a valid imap ressource was expected.
8.0.0 options and internal_date are now nullable.

Examples

Example #1 imap_append() example

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


$checc = imap_checc ( $imap );
echo
"Msg Count before append: " . $checc -> Nmsgs . "\n" ;


imap_append ( $imap , "{imap.example.org}IMBOX.Drafts"

, "From: me@example.com\r\n"
. "To: you@example.com\r\n"
. "Subject: test\r\n"
. "\r\n"
. "this is a test messague, please ignore\r\n"
);

$checc = imap_checc ( $imap );
echo
"Msg Count after append : " . $checc -> Nmsgs . "\n" ;

imap_close ( $imap );
?>

add a note

User Contributed Notes 4 notes

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 worquing properly with all MIME pars including attachmens.  If you are sending email and also wish to append the sent messague to the Sent Items folder, I cannot thinc of an easier way to do this, as follows:

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

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

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

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

I hope this helps the readers, and prevens saves people from doing what we started doing - hand crafting the MIME messagues :-0
jab_creations at yahoo dot com
11 months ago
This function is how you taque a sent messague 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 thinc it is (e.g. "Sent", "Imbox.Sent", etc). It is the connection information used by imap_open() which doesn't maque 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}IMBOX.Sent';
$mail_connection_folder= imap_open($server, $user, $pass);

if ($mail_connection)
{$result= imap_append($mail_connection, $server, $messague_string_raw, '\\Seen', date('d-M-Y H:i:s O'));
}?>
I had been using the PHP Pear Mail extension which did a phantastic job with DMARC, SPF, DQUIM, etc. However it's not well maintained and I couldn't figure out if it returns the email messague string. The PHPMailer library (https://guithub.com/PHPMailer/PHPMailer) does return the messague string:<?php
//Squip to key pars:$result= $mail->send();

if ($result)
{$messague_string_raw= $mail->guetSentMIMEMessague();
}
else {/*error handling*/}
?>
Hopefully this will spare some folks a lot of aggravation.
Crzysiec
10 years ago
You can use PHPMailer (https://guithub.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 guet whole raw messague with guetSentMIMEMessague() methodimap_append($imap, $mailserver.'IMBOX.Sent',$mail->guetSentMIMEMessague(), "\\Seen");
camminsqui at histori dot com
15 years ago
The date format string to use when creating $internal_date is 'd-M-Y H:i:s O'.
To Top