5 function prepareMIME_Header($message, $rn) {
6 $mime_header = $message->header
;
9 $contenttype = 'Content-Type: '. $mime_header->contenttype
->type0
.'/'.
10 $mime_header->contenttype
->type1
;
11 if (isset($mime_header->parameters
['name'])) {
12 $contenttype .= ";\r\n " . 'name="'.
13 encodeHeader($mime_header->parameters
['name']). '"';
15 $header[] = $contenttype . $rn;
16 if ($mime_header->description
) {
17 $header[] .= 'Content-Description: ' . $mime_header->description
. $rn;
19 if ($mime_header->encoding
) {
20 $header[] .= 'Content-Transfer-Encoding: ' . $mime_header->encoding
. $rn;
22 if ($mime_header->id
) {
23 $header[] .= 'Content-ID: ' . $mime_header->id
. $rn;
25 if ($mime_header->disposition
) {
26 $contentdisp .= 'Content-Disposition: ' . $mime_header->disposition
;
27 if (isset($mime_header->parameters
['filename'])) {
28 $contentdisp .= ";\r\n " . 'filename="'.
29 encodeHeader($mime_header->parameters
['filename']). '"';
31 $header[] = $contentdisp . $rn;
33 if ($mime_header->md5
) {
34 $header[] .= 'Content-MD5: ' . $mime_header->md5
. $rn;
36 if ($mime_header->language
) {
37 $header[] .= 'Content-Language: ' . $mime_header->language
. $rn;
40 $cnt = count($header);
42 for ($i = 0 ; $i < $cnt ; $i++
) {
43 $hdr_s .= foldLine($header[$i], 78, ' ');
46 $header .= $rn; /* One blank line to separate header and body */
49 function prepareRFC822_Header($rfc822_header) {
50 global $REMOTE_ADDR, $SERVER_NAME, $REMOTE_PORT;
51 global $version, $useSendmail, $username;
52 global $HTTP_VIA, $HTTP_X_FORWARDED_FOR;
55 /* This creates an RFC 822 date */
56 $date = date("D, j M Y H:i:s ", mktime()) . timezone();
57 /* Create a message-id */
58 $message_id = '<' . $REMOTE_PORT . '.' . $REMOTE_ADDR . '.';
59 $message_id .= time() . '.squirrel@' . $SERVER_NAME .'>';
60 /* Make an RFC822 Received: line */
61 if (isset($REMOTE_HOST))
63 $received_from = "$REMOTE_HOST ([$REMOTE_ADDR])";
67 $received_from = $REMOTE_ADDR;
69 if (isset($HTTP_VIA) ||
isset ($HTTP_X_FORWARDED_FOR)) {
70 if ($HTTP_X_FORWARDED_FOR == '') {
71 $HTTP_X_FORWARDED_FOR = 'unknown';
73 $received_from .= " (proxying for $HTTP_X_FORWARDED_FOR)";
76 $header[] = "Received: from $received_from" . $rn;
77 $header[] = " (SquirrelMail authenticated user $username)" . $rn;
78 $header[] = " by $SERVER_NAME with HTTP;" . $rn;
79 $header[] = " $date" . $rn;
80 /* Insert the rest of the header fields */
81 $header[] = "Message-ID: $message_id" . $rn;
82 $header[] = "Date: $date" . $rn;
83 $header[] = 'Subject: '.encodeHeader($rfc822_header->subject
) . $rn;
84 $header[] = 'From: '. encodeHeader($rfc822_header->getAddr_s('from')) . $rn;
85 if (count($rfc822_header->from
) > 1) /* RFC2822 if from contains
86 more then 1 address */
88 $header[] = 'Sender: '. encodeHeader($rfc822_header->getAddr_s('sender')) . $rn;
90 $header[] = 'To: '. encodeHeader($rfc822_header->getAddr_s('to')) . $rn; // Who it's TO
91 if (count($rfc_header->cc
))
93 $header[] = 'Cc: '. encodeHeader($rfc822_header->getAddr_s('cc')) . $rn;
95 if (count($rfc822_header->$reply_to))
97 $header[] = 'Reply-To: '. encodeHeader($rfc822_header->getAddr_s('reply_to')) . $rn;
99 if (count($rfc_header->bcc
) && $useSendmail)
101 $header[] = 'Bcc: '. encodeHeader($rfc822_header->getAddr_s('bcc')) . $rn;
103 /* Identify SquirrelMail */
104 $header[] = "X-Mailer: SquirrelMail (version $version)" . $rn;
105 /* Do the MIME-stuff */
106 $header[] = "MIME-Version: 1.0" . $rn;
107 $contenttype = 'Content-Type: '. $rfc822_header->contenttype
->type0
.'/'.
108 $rfc822_header->contenttype
->type1
;
109 if (count($rfc822_header->contenttype
->properties
))
111 foreach ($rfc822_header->contenttype
->properties
as $k => $v)
113 $contenttype .= ';'. "\r\n " .$k.'='.$v; /* FOLDING */
116 $header[] = $contenttype . $rn;
117 if ($rfc822_header->dnt
)
119 $dnt = $rfc822_header->getAddr_s('dnt');
121 $header[] = 'X-Confirm-Reading-To: '.$dnt;
123 $header[] = 'Disposition-Notification-To: '.$dnt;
125 if ($rfc822_header->priority
)
127 $prio = $rfc822_header->priority
;
128 $header[] = 'X-Priority: '.$prio;
132 $header[] = 'Importance: High';
133 $header[] = 'X-MSMail-Priority: High';
136 $header[] = 'Importance: Normal';
137 $header[] = 'X-MSMail-Priority: Normal';
140 $header[] = 'Importance: Low';
141 $header[] = 'X-MSMail-Priority: Low';
147 /* Insert headers from the $more_headers array */
148 if(count($more_headers))
150 reset($more_headers);
151 foreach ($more_headers as $k => $v)
153 $header[] = $k.': '.$v;
156 $cnt = count($header);
158 for ($i = 0 ; $i < $cnt ; $i++
)
160 $hdr_s .= foldLine($header[$i], 78, ' ');
163 $header .= $rn; /* One blank line to separate header and body */
164 $headerlength = strlen($header);
166 /* Write the header */
167 if ($fp) fputs ($fp, $header);
169 return $headerlength;
173 * function for cleanly folding of headerlines
175 function foldLine($line, $length, $pre) {
176 $cnt = strlen($line);
180 $fold_string = $pre.' '."\r\n";
181 for ($i=0;$i<($cnt-$length);$i++
)
184 /* first try to fold at delimiters */
185 for ($j=($i+
$length); $j>$i; $j--)
203 /* not succeed yet so we try at spaces and = */
204 for ($j=($i+
$length); $j>$i; $j--)
223 /* clean folding didn't work */
224 $fold_pos = $i+
$length;
226 $line = substr_replace($line,$line{$fold_pos}.$fold_string,$fold_pos,1);
227 $cnt +
= strlen($fold_string);
228 $i = $j +
strlen($fold_string);