Click to See Complete Forum and Search --> : multipart email sending raw code :S


knowj
08-08-2007, 04:57 AM
I have a php generated multipart email with and attachment but when i send the email this is what i get:


Return-Path: <anonymous@url.info>
Delivered-To: 10-john@url.com
Received: (qsamail 31127 invoked by uid 43); 8 Aug 2007 09:53:36 -0000
Date: 8 Aug 2007 09:53:36 -0000
Message-ID: <20070808095336.31126.qsamail@url.info>
To:
Subject: your subject
To: <john@url.com>
From: Name <john@url.com>
Cc:

MIME-Version: 1.0
Content-Type: multipart/mixed;
boundary="--Multipart_Boundary_xf97d3d6d544b04b4ec15fddade8c5c6fx--"

This is a multi-part message in MIME format.

--Multipart_Boundary_xf97d3d6d544b04b4ec15fddade8c5c6fx--
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 7bit

test message

--Multipart_Boundary_xf97d3d6d544b04b4ec15fddade8c5c6fx--
Content-Type: application/octet-stream;
name="filename.pdf
Content-Disposition: attachment;
filename="filename.pdf
Content-Transfer-Encoding: base64

JVBERi0xLjMKMyAwIG9iago8PC9UeXBlIC9QYWdlCi9QYXJlbnQgMSAwIFIKL1Jlc291cmNlcyAy

IDAgUgovQ29udGVudHMgNCAwIFI+PgplbmRvYmoKNCAwIG9iago8PC9GaWx0ZXIgL0ZsYXRlRGVj

b2RlIC9MZW5ndGggNTI2Pj4Kc3RyZWFtCnicjVPdbtowGL3nKb7LVoIP2/FPcplBgAxIKBh1mnqT

gdmYQtxCUNXn4UXnEFjL6CSUG8c+R+fHnxl8bRAUCl4bL0C5QkKg+hSpVsxHT4DiATIKiw20Ywpd

Cw+NLxraPQrUr1B6BZGutriQ6PmgFEUWgF7C3cPellm5tsU96N8nVLvHgJJPiVxUehWxk69NUV6w

nJz4lMUk+vzIGra0Wfy6SUsGAQa1yW5WmpuUpE+R+0cOUS3itxgh6jY1wVHWHqdmZbamWBhILN4m

6xHk8iTL5L8cesHxKFIfhBBIvSNlvvmxNXme7c68+lKFYKgkbEBIiYF3/s9h9p8kbiJ8BYII9Fld

WzSL+wmESRfCqX5Mp8MPzmo0DyjK+kKf7mxhWna1erqHg6pyXqOlhx45oifTtDvv6DhNrlFuGk/R

tIXnrV3uXZdMuGmFhc3tfgsv+yxfl2/w0+Yr2JVvuYH9uQXHWBelWYItgMNzVph8h9ciHsegNj4v

1mVFciIHVwkT12BGUPknR2WWw4EJyVBcJ/QChrz2PltsjSl2cNELvWiluoTLB8Y4R+K5sGdzyfd4

HMEoHsc66jbBtfeYpqNJ2BnCKEyiJuiBOw47EYzD6TDSTUhSreOkPwjHbt1349MPP0h6Lrd76lQh

5+8C2EkdWkejaDJIkwgIpQIC13igGGlCL/z2vsUJ+5vhD6IPC9oKZW5kc3RyZWFtCmVuZG9iagox

IDAgb2JqCjw8L1R5cGUgL1BhZ2VzCi9LaWRzIFszIDAgUiBdCi9Db3VudCAxCi9NZWRpYUJveCBb

MCAwIDU5NS4yOCA4NDEuODldCj4+CmVuZG9iago1IDAgb2JqCjw8L1R5cGUgL0ZvbnQKL0Jhc2VG

b250IC9IZWx2ZXRpY2EtQm9sZAovU3VidHlwZSAvVHlwZTEKL0VuY29kaW5nIC9XaW5BbnNpRW5j

b2RpbmcKPj4KZW5kb2JqCjYgMCBvYmoKPDwvVHlwZSAvRm9udAovQmFzZUZvbnQgL0hlbHZldGlj

YQovU3VidHlwZSAvVHlwZTEKL0VuY29kaW5nIC9XaW5BbnNpRW5jb2RpbmcKPj4KZW5kb2JqCjcg

MCBvYmoKPDwvVHlwZSAvWE9iamVjdAovU3VidHlwZSAvSW1hZ2UKL1dpZHRoIDE0NwovSGVpZ2h0

IDcwCi9Db2xvclNwYWNlIC9EZXZpY2VSR0IKL0JpdHNQZXJDb21wb25lbnQgOAovRmlsdGVyIC9E

Q1REZWNvZGUKL0xlbmd0aCAzMDM2Pj4Kc3RyZWFtCv/Y/+AAEEpGSUYAAQIAAGQAZAAA/+wAEUR1

Y2t5AAEABAAAAFAAAP/uAA5BZG9iZQBkwAAAAAH/2wCEAAICAgICAgICAgIDAgICAwQDAgIDBAUE

BAQEBAUGBQUFBQUFBgYHBwgHBwYJCQoKCQkMDAwMDAwMDAwMDAwMDAwBAwMDBQQFCQYGCQ0LCQsN

Dw4ODg4PDwwMDAwMDw8MDAwMDAwPDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDP/AABEIAEYA

kwMBEQACEQEDEQH/xAGiAAAABwEBAQEBAAAAAAAAAAAEBQMCBgEABwgJCgsBAAICAwEBAQEBAAAA

AAAAAAEAAgMEBQYHCAkKCxAAAgEDAwIEAgYHAwQCBgJzAQIDEQQABSESMUFRBhNhInGBFDKRoQcV

sUIjwVLR4TMWYvAkcoLxJUM0U5KismNzwjVEJ5OjszYXVGR0w9LiCCaDCQoYGYSURUaktFbTVSga

8uPzxNTk9GV1hZWltcXV5fVmdoaWprbG1ub2N0dXZ3eHl6e3x9fn9zhIWGh4iJiouMjY6PgpOUlZ

aXmJmam5ydnp+So6SlpqeoqaqrrK2ur6EQACAgECAwUFBAUGBAgDA20BAAIRAwQhEjFBBVETYSIG

cYGRMqGx8BTB0eEjQhVSYnLxMyQ0Q4IWklMlomOywgdz0jXiRIMXVJMICQoYGSY2RRonZHRVN/Kj

s8MoKdPj84SUpLTE1OT0ZXWFlaW1xdXl9UZWZnaGlqa2xtbm9kdXZ3eHl6e3x9fn9zhIWGh4iJio

uMjY6Pg5SVlpeYmZqbnJ2en5KjpKWmp6ipqqusra6vr/2gAMAwEAAhEDEQA/APv5irsVdirsVdir

sVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirs

VdirsVdirsVdirsVdirRIUFmIVVFSTsABir5Q0/zl+b35/Jd6r+Umv2P5T/lGJ5IPL/5mXenJrGt

+ZBA5je80qxuWW0tbFmBEM9wsrTqPUSJI2R3VV7vRf8AnJn8rrWfzDp3n6H/AJyO0qyHrat5G1nS

dO0HXpYEFZDpGoaWltZvOBukNzbhZD8Prx15Yq988ied/Ln5keUPL/nnylem/wDL/mS0W70+Z0aK

VdykkM0TgPFLFIrRyRsAyOrKwBBxVluKuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KoPUdR0/R9Pv9W1

a9g0zS9Lt5bvUtRupFigt7eBDJLLLI5CoiKpZmJoAKnFXzFpvm386fzzjXWfy0urX8mvymu6PoHn

vWtN/SPmXX7c/ZvNP0q5aO3sLWUfFDJdrLJItH+rxqVLKpjqH/OOuseYrObR/Of/ADkN+Zvmzy1q

i+l5n8syTaFpttqVu20lrJNpOj2V3FDKKrIsM6FlJUtQnFX0Xpum6fo2nafo+k2UGmaVpVtFZ6Zp

trGsUFvbwII4ooo1AVURVCqAKACmKo3FXzX/AM45CCO6/wCcg7bTCT5etfzg8wDQlH92ry2unz6o

sXag1WS85U/b54q+lMVdirsVdirsVdirsVdirsVdirsVdirsVfL/APzkEsXnbzX+Sv5EXgZtA/Mz

Wb7W/PdtsUvNA8pQxXs9hIO8d3ezWcUq9GhMiHZsVfT4AUAAAACgA6AYq3irsVfGH5mf85D+Zr7y

753v/wAs7GLyt5B8p3l1ovmL/nIXXUFzZQ3dtOLK5i8t6JB6l1rF2l0xtoQyxQPcjgrTU4MqhfI/

5ia7+R35eaPb6n/zjp508r/k95btZLnU/ON3qmmaz5gt4pna5vNZ1zSrOeS4LyySSXN00LTSKzOz

RihAVeS/8/UvMMg/5wr1nzD5X1x0hv8AW/LtxpmtaZclRNb3FwGR4poWHJHRgQQaEYq+L/On/OC/

mw/84mW//OUeo/8AOSf5g6h+d2geQLTzzbzvqTLplvaW+nx3qadahAtxEYrcBEkWUDmK8ADQKvoX

8vfyZj/5+Df84s/847/mx+cP5s+cPJfmXypo+t6frOr+Wr22sU1H6tqDWb3t8ZYZF5lLBXZhxFWc

/JV8Z/8AOHn/ADj+fzV/5zDn8x/kx+ZXnnW/+ccPyB12yvbzz55jvzM/mDVLFxLFaWqQpDEYp5E5

EFSRAOT8WlRcVfNvm/zb5rX/AJxf/wCcj7xfNGrpd2v/ADkfpNvbXK31wHjhOneYCYlb1KhSQDx6

bDwGKvuT/nIX/nCLzt+VH/OP15/zlVa/85M/mJq/5++TdO07zH5h1a61JhZTPNJAs8FnwCzwiH1f

3dZGVgvEoob4VUb5E/5wu88f85V/849w/wDOUX5nf85I+eZvzq846RfeYvKKWlzHb6LpYtmmW0t/

qsaKyK4hBb0GiCctlJBLKvF2/wCc5vzo1v8A5wi/JryVcfmTJ5X8+/mN+Yeo+QNZ/OW9uGju7Ty7

pcenyyXc92CHR1GqRJJODz9ONyTzYviqj+b+jfkp/wA4weU9G/Ov/nEn/nOG985/nB5T1Gxk8zeV

b3zHa6pF5jgnlWK4P1GAJyVWYO8cpkBj5bhlDYq/XX/oc/TP+paH/rM//QxX96f95f8Alg6f8Nir

7kxV2KuxV8wfngI/Kf5rf846/m5fyel5e8v6xq3kjzNdkfBaQ+dYbaCyuZG6Kn6SsbSAsdh6oJ2x

V9P4q7FWH/mB530P8tvJHmvz95kn9DRPKOmXOp35H23W3QsIox+1JK1ERRuzEKNzir5Cn/LLzp5S

/wCcWfyMgPl671/zT+VGs+WPPvnXyPYoJbu9e1vf0jq9paxVAlnt3uJJYEr+8kiRV+Jhir1PWv8A

nLX8hh5ZfUPLXnbTfzF8wanE8Hl78sdBkF55k1O9ZSI7AaQB9ahkZ/gf6xGixbmUooYhV8Kf850/

l15n8lf8+zvKX5c6hbSan5n8rR+T9P1W0sFe5WOe3dBLFCUBLRwmqKafZUYq+ofPFpdv/wA+4dbs

ktJ3vm/5x9EK2QjczGX/AA0q+n6dOXKu3Gla4q/F7zZ+d35mfl//AM++v+cdP+cevKmga9pC/mlB

5lu/zG8yWljO91BoqeZL+BrCGKiHlcULSVZeUYCV4yMQq++f+cSP+c2P+cdPI2n/AJTf841fld+S

H5qeX7PU9SstDtvMGr6NZRRz6jqMyRS6lqU0V67VkkbnIwU8V+FQFVQFX5VebvLPmRv+cXv+ckLV

PL2qPc3H/OSGkzwQLZzl3iGneYAZFXhUqCRv03HiMVf0A/8AObVpd3f/ADgn+blnaWs11dy+S7JI

rSGNnlZvWtdgigsT9GKt/wDOGlpd2v8Azgf+VFndWs1teReRLtJLSWNklVq3PwlGAYH6MVfhr+XH

/OPH5k+dP+cIfJH5l+UPy+n85eZvyH/OjWdb1X8u72xeWTVNGurDRJJwLN0LXKCSzRXjVSWjaSgP

EjFX2Pbf85b/APOJfmuPQvLv5Zf8+5p/OH5qand21tqPkWTyVotvFa8pFW5peRwTu3BeXEvAi93M

YrRV+w3+C/JP/lldP/5QH/Dn+8Gk/wDHE/6lX+8/uf8Ain/eb/KxV65irsVdirHvNnlTy9558s67

5O82aVBrnlrzLZTafrek3AJjnt51KOpIIINDUMpBU0KkEA4q+ddM1v8AOb8jIV8u+avLOt/nz+XO

nKIvLn5h+XxFc+bLW0XaK31zS5Hha+kiX4frdmWklA5SW6vydlWS3H/OSHlsW8baZ+Wv5s63qE20

Ojxfl95js5GY/stcanZWdonzedV98VSOy8jfmJ+c3mTQfNX5z6TB5J8geUr+HWPJ35KwXUd/c3eq

WrB7TUvMl3ATbu1q4EkFnAzxJKFlklldEEar6ixVBR6bp0N5NqMNhbRahcqEuL5IkWaRR0DyAciN

u5xVG4q7FXYq7FXYq7FXYq7FWqCpNNz1OKt4q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY

q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq/wD/2QplbmRzdHJlYW0K

ZW5kb2JqCjIgMCBvYmoKPDwKL1Byb2NTZXQgWy9QREYgL1RleHQgL0ltYWdlQiAvSW1hZ2VDIC9J

bWFnZUldCi9Gb250IDw8Ci9GMSA1IDAgUgovRjIgNiAwIFIKPj4KL1hPYmplY3QgPDwKL0kxIDcg

MCBSCj4+Cj4+CmVuZG9iago4IDAgb2JqCjw8Ci9Qcm9kdWNlciAoRlBERiAxLjUzKQovQ3JlYXRp

b25EYXRlIChEOjIwMDcwODA3MTEwODM3KQo+PgplbmRvYmoKOSAwIG9iago8PAovVHlwZSAvQ2F0

YWxvZwovUGFnZXMgMSAwIFIKL09wZW5BY3Rpb24gWzMgMCBSIC9YWVogbnVsbCBudWxsIDFdCi9Q

YWdlTGF5b3V0IC9TaW5nbGVQYWdlCj4+CmVuZG9iagp4cmVmCjAgMTAKMDAwMDAwMDAwMCA2NTUz

NSBmIAowMDAwMDAwNjgzIDAwMDAwIG4gCjAwMDAwMDQxNjggMDAwMDAgbiAKMDAwMDAwMDAwOSAw

MDAwMCBuIAowMDAwMDAwMDg3IDAwMDAwIG4gCjAwMDAwMDA3NzAgMDAwMDAgbiAKMDAwMDAwMDg3

MSAwMDAwMCBuIAowMDAwMDAwOTY3IDAwMDAwIG4gCjAwMDAwMDQyOTIgMDAwMDAgbiAKMDAwMDAw

NDM2OCAwMDAwMCBuIAp0cmFpbGVyCjw8Ci9TaXplIDEwCi9Sb290IDkgMCBSCi9JbmZvIDggMCBS

Cj4+CnN0YXJ0eHJlZgo0NDc4CiUlRU9GCg==



--Multipart_Boundary_xf97d3d6d544b04b4ec15fddade8c5c6fx--


php code:
function email_client_attachment()
{
// multiple recipients
$to = $this->client_email;
$headers .= 'To: '.$this->toname.' <'.$this->to.'>'."\r\n";
$headers .= 'From: '.$this->fromname.' <'.$this->from.'>'."\r\n";
$headers .= 'Cc: '.$this->logged_email."\r\n";
$headers .= 'Bcc: '.$this->bcc."\r\n";
// subject
$subject = $this->subject;
if (file_exists($this->attachment))
{
$file = fopen($this->attachment, 'rb');
$data = fread($file, filesize($this->attachment));
fclose($file);
$attachment = chunk_split(base64_encode($data));
//define the body of the message.
$semi_rand = md5( time() );
$mime_boundary = 'Multipart_Boundary_x'.$semi_rand.'x';

$headers .= "\n".'MIME-Version: 1.0'."\n".
' Content-Type: multipart/mixed;'."\n" .
' boundary='.$mime_boundary;

$this->message = 'This is a multi-part message in MIME format.'."\n\n".
'--'.$mime_boundary."\n".
'Content-Type: text/plain; charset=iso-8859-1'."\n".
"Content-Transfer-Encoding: 7bit\n\n" .
$this->message . "\n\n";

$data = chunk_split(base64_encode($data));

$this->message .= '--'.$mime_boundary."\n".
' Content-Type: application/octet-stream;'."\n".
' name="'.$this->file_name."\n".
' Content-Disposition: attachment;'."\n".
' filename="'.$this->file_name."\n".
' Content-Transfer-Encoding: base64'."\n\n".
$data."\n\n".
'--'.$mime_boundary."\n";
}

//Send the email
$ok = @mail('', $this->subject, $this->message, $headers);
if ($ok)
{
echo '<div class="message">Message Sent!</div>'."\n\r";
}
else
{
echo '<div class="message">Message Not Sent!</div>'."\n\r";
}
}

What im i doing wrong?

knowj
08-08-2007, 09:43 AM
problem solved

ellisgl
08-08-2007, 12:54 PM
What was the problem? Also mark as resolved =)

knowj
08-08-2007, 01:52 PM
It seemed to be a problem with the \r's and something to do with the layout/spacing of the code. I didn't managed to break it down to 1 specific thing which was the strange thing.

Thats the final working code:

class email extends paging
{
var $to;
var $toname;

var $quote_no;

var $cc;
var $bcc;

var $from;
var $fromname;

var $subject;

var $massage;
var $attachment;
var $file_name;

function email($to=NULL, $toname=NULL, $from=NULL, $fromname=NULL, $message=NULL, $subject=NULL, $cc=NULL, $attachment=NULL)
{
$this->to = $to;
$this->toname = $toname;

$this->cc = $cc;
$this->bcc = $bcc;

$this->from = $from;
$this->fromname = $fromname;

$this->subject = $subject;

$this->messages = $message;
if (!empty($attachment))
{
$this->attachment = '/home/httpd/vshhosts/url.com/subdomains/development/httpdocs/someroot/quotes/'.$attachment.'.pdf';
$this->file_name = $attachment.'.pdf';
$this->quote_no = $attachment;
}
$this->signature = '
some signature.';
}

function email_client_attachment()
{
$semi_rand = md5(time());
$mime_split = 'mimesplit-'.$semi_rand;
// multiple recipients
$headers .= 'From: '.$this->fromname.' <'.$this->from.'>'."\n";
$headers .= 'Cc: '.$this->logged_email."\n";
$headers .= 'MIME-Version: 1.0'."\n";
$headers .= "Content-Type: multipart/mixed;";
$headers .= " boundary=".$mime_split."\n";

if (file_exists($this->attachment))
{
//define the body of the message
$this->message .= '--'.$mime_split."\n";
$this->message .= 'Content-Transfer-Encoding: 7bit'."\n";
$this->message .= 'Content-Type: text/plain';
$this->message .= ' charset=iso-8859-1'."\n\n";
$this->message .= $this->messages."\n\n";
$this->message .= $this->signature."\n\n";

$file = fopen($this->attachment, 'rb');
$data = fread($file, filesize($this->attachment));
fclose($file);
$attachment = chunk_split(base64_encode($data));
$data = chunk_split(base64_encode($data));

$this->message .= '--'.$mime_split."\n";
$this->message .= 'Content-Transfer-Encoding: base64'."\n";
$this->message .= 'Content-Type: application/pdf;'."\n".'x-unix-mode=0644'."\n".'name='.$this->file_name."\n";
$this->message .= 'Content-Disposition: attachment;'."\n".'filename='.$this->file_name."\n\n";
$this->message .= $data."\n";
$this->message .= '--'.$mime_split;
}
else
{
$this->message .= $this->messages."\n\n";
$this->message .= $this->signature."\n\n";
}

//Send the email
$ok = @mail($this->toname.' <'.$this->to.'>', $this->subject, $this->message, $headers);
if ($ok)
{
echo '<div class="message">Message Sent!</div>'."\n";
if ($this->quote_no)
{
$sql = "INSERT INTO quote_sent (quote_id, contact_email, sent_by) VALUES ('$this->quote_no', '$this->to', '$this->fromname')";
$this->execute($sql);
}
}
else
{
echo '<div class="message">Message Not Sent!</div>'."\n";
}
}
}

I had trouble with entourage but it was working fine in mail (on mac) when i first got it working. tested it on outlook, entourage and mail now but im sure some client will come up with some pathetic problem with a mail program which no one has ever heard of or a spam filter which is messing up the headers.

The class isn't by any means perfect it was finally finished in frustration so you will notice flaws, bad practice and procedural methods (i have only been writing OO for a month so far) within it.