cannot mail

PHP programming forum. Ask questions or help people concerning PHP code. Don't understand a function? Need help implementing a class? Don't understand a class? Here is where to ask. Remember to do your homework!

Moderator: General Moderators

User avatar
twigletmac
Her Royal Site Adminness
Posts: 5371
Joined: Tue Apr 23, 2002 2:21 am
Location: Essex, UK

Post by twigletmac »

Could you post the code you currently have for build().

Mac
victor
Forum Commoner
Posts: 65
Joined: Fri Feb 13, 2004 1:36 am

Post by victor »

current codes for build():

Code: Select all

<?php
	function _build()
	{
	 $boundary = 'b'.md5(RandomString(5));
	 
	 if($this->from !="")
	 $ret = "From: ".$this->from ."\r\n";
 
	 $ret.= 'Content-type:multipart/mixed; ';
	 $ret.= "boundary = $boundary\r\n\r\n";
	 $ret.= "This is a MIME encoded message.\r\n\r\n";
	 $ret.= "--$$boundary";
          
	 $ret.= "Content-type: text/plain\r\n";
	 $ret.= "Content-Transfer-Encoding: 7bit\r\n\r\n";
	 $ret.= $this->body."\r\n--$boundary"; 
         
         
	 	foreach($this->attachments as $attachment)
	 	{
	 	 $attachment['data']= base64_encode($attachment['data']);
	 	 $attachment['data']= chunk_split($attachment['data']);
	 	 
	 	 $TYPE = $attachment['type'];
	 	 $FILENAME = $attachment['filename'];
	 	 $ENCODING = $attachment['encoding'];
	 	 $DATA = $attachment['data'];	 	 
  	
	 	 $data = "Content-type: $TYPE".$FILENAME?"; name = "$FILENAME"":""."\r\n"."Content-Transfer-Encoding:$ENCODING"."\r\n\r\n$DATA\r\n";
	 	 
	 	 $ret.="\r\n--$data--$boundary";
	 	} 
	 	 $ret.="--\r\n";
	
	  	 
	  return($ret);
}

?>
victor
Forum Commoner
Posts: 65
Joined: Fri Feb 13, 2004 1:36 am

Post by victor »

I realized that the concatenation of strings is giving problem, made revision to the $data variable as follows:

Code: Select all

<?php

	function _build()
	{
	 $boundary = 'b'.md5(RandomString(5));
	 
	 if($this->from !="")
	 $ret = "From: ".$this->from ."\r\n";
 
	 $ret.= 'Content-type:multipart/mixed; ';
	 $ret.= "boundary = $boundary\r\n\r\n";
	 $ret.= "This is a MIME encoded message.\r\n\r\n";
	 $ret.= "--$$boundary";
          
	 $ret.= "Content-type: text/plain\r\n";
	 $ret.= "Content-Transfer-Encoding: 7bit\r\n\r\n";
	 $ret.= $this->body."\r\n--$boundary"; 
         
         
	 	foreach($this->attachments as $attachment)
	 	{
	 	 $attachment['data']= base64_encode($attachment['data']);
	 	 $attachment['data']= chunk_split($attachment['data']);
	 	 
	 	 $TYPE = $attachment['type'];
	 	 $FILENAME = $attachment['filename'];
	 	 $ENCODING = $attachment['encoding'];
	 	 $DATA = $attachment['data'];	 	 
  	
	 	 $data = "Content-type: ".$TYPE."; name = ".$FILENAME.";\r\n
	 	 Content-Transfer-Encoding: ".$ENCODING."\r\n\r\n".$DATA."\r\n";
	 	 
	 	 $ret.="\r\n".$data."\r\n----".$boundary;
	 	} 
	 	 $ret.="--\r\n";
	
	  	 
	  return($ret);
	 
?>


and I obtained this in Yahoo:

Code: Select all

ICA8dGFibGUgYm9yZGVyPTEgYm9yZGVyY29sb3I9IzY2NjY2NiBjZWxscGFkZGluZz0zIGNlbGxz cGFjaW5nPTAgd2lkdGg9NzAwPg0KICAgPHRyPjx0ZCB3aWR0aD02MD48Yj5Td2ltbWluZyBDb21w bGV4PC9iPjwvdGQ+PHRkIHdpZHRoPTE1MCBhbGlnbj1jZW50ZXI+PGI+VGltZTwvYj48L3RkPjx0 ZCBhbGlnbj1jZW50ZXI+PGI+RGF5PC9iPjwvdGQ+PHRkIGFsaWduPWNlbnRlcj48Yj5MZXZlbDwv Yj48L3RkPg0KICAgPHRkIGFsaWduPWNlbnRlcj48Yj5BZ2UgR3JvdXA8L2I+PC90ZD48dGQgYWxp Z249Y2VudGVyPjxiPlVwZGF0ZWQgQ2xhc3MgU2l6ZTwvYj48L3RkPjwvdHI+PHRyPjx0ZD5CZWRv azwvdGQ+PHRkIGFsaWduPWNlbnRlcj44OjAwYW0gdG8gOTowMGFtPC90ZD48dGQgYWxpZ249Y2Vu dGVyPlNhdDwvdGQ+DQogICAgIDx0ZCBhbGlnbj1jZW50ZXI+QmVnaW5uZXJzPC90ZD48dGQgYWxp Z249Y2VudGVyPkdyb3VwIExlc3NvbiBmb3IgQ2hpbGRyZW48L3RkPg0KICAgICA8dGQgYWxpZ249 Y2VudGVyPjQ8L3RkPjwvdHI+PHRyPjx0ZD5CZWRvazwvdGQ+PHRkIGFsaWduPWNlbnRlcj45OjAw YW0gdG8gMTA6MDBhbTwvdGQ+PHRkIGFsaWduPWNlbnRlcj5TYXQ8L3RkPg0KICAgICA8dGQgYWxp Z249Y2VudGVyPkJlZ2lubmVyczwvdGQ+PHRkIGFsaWduPWNlbnRlcj5Hcm91cCBMZXNzb24gZm9y IENoaWxkcmVuPC90ZD4NCiAgICAgPHRkIGFsaWduPWNlbnRlcj40PC90ZD48L3RyPjx0cj48dGQ+ QmVkb2s8L3RkPjx0ZCBhbGlnbj1jZW50ZXI+ODowMGFtIHRvIDk6MDBhbTwvdGQ+PHRkIGFsaWdu PWNlbnRlcj5TdW48L3RkPg0KICAgICA8dGQgYWxpZ249Y2VudGVyPkJlZ2lubmVyczwvdGQ+PHRk IGFsaWduPWNlbnRlcj5Hcm91cCBMZXNzb24gZm9yIENoaWxkcmVuPC90ZD4NCiAgICAgPHRkIGFs aWduPWNlbnRlcj43PC90ZD48L3RyPjx0cj48dGQ+QmVkb2s8L3RkPjx0ZCBhbGlnbj1jZW50ZXI+ OTowMGFtIHRvIDEwOjAwYW08L3RkPjx0ZCBhbGlnbj1jZW50ZXI+U3VuPC90ZD4NCiAgICAgPHRk IGFsaWduPWNlbnRlcj5CZWdpbm5lcnM8L3RkPjx0ZCBhbGlnbj1jZW50ZXI+R3JvdXAgTGVzc29u IGZvciBDaGlsZHJlbjwvdGQ+DQogICAgIDx0ZCBhbGlnbj1jZW50ZXI+NTwvdGQ+PC90cj48L3Rh YmxlPjwvYm9keT48L2h0bWw+
victor
Forum Commoner
Posts: 65
Joined: Fri Feb 13, 2004 1:36 am

Post by victor »

seems like the encoded $html chunk cannot be decoded in yahoo. When I echo _build() I get

Code: Select all

From: xyz MIME-Version: 1.0 Content-type:multipart/mixed; boundary = b5341808a7ca24ebd7b1bb68c5585a9d9 This is a MIME encoded message. --b5341808a7ca24ebd7b1bb68c5585a9d9Content-type: text/plain Content-Transfer-Encoding: 7bit This is a test mail --b5341808a7ca24ebd7b1bb68c5585a9d9 Content-type: text/html; name = ; Content-Transfer-Encoding: base64 IDxodG1sPjxib2R5PjxiPllvdXIgVXBkYXRlIGFyZSBhcyBmb2xsb3dzPC9iPjxicj48YnI+DQog ICA8dGFibGUgYm9yZGVyPTEgYm9yZGVyY29sb3I9IzY2NjY2NiBjZWxscGFkZGluZz0zIGNlbGxz cGFjaW5nPTAgd2lkdGg9NzAwPg0KICAgPHRyPjx0ZCB3aWR0aD02MD48Yj5Td2ltbWluZyBDb21w bGV4PC9iPjwvdGQ+PHRkIHdpZHRoPTE1MCBhbGlnbj1jZW50ZXI+PGI+VGltZTwvYj48L3RkPjx0 ZCBhbGlnbj1jZW50ZXI+PGI+RGF5PC9iPjwvdGQ+PHRkIGFsaWduPWNlbnRlcj48Yj5MZXZlbDwv Yj48L3RkPg0KICAgPHRkIGFsaWduPWNlbnRlcj48Yj5BZ2UgR3JvdXA8L2I+PC90ZD48dGQgYWxp Z249Y2VudGVyPjxiPlVwZGF0ZWQgQ2xhc3MgU2l6ZTwvYj48L3RkPjwvdHI+PHRyPjx0ZD5CZWRv azwvdGQ+PHRkIGFsaWduPWNlbnRlcj44OjAwYW0gdG8gOTowMGFtPC90ZD48dGQgYWxpZ249Y2Vu dGVyPlNhdDwvdGQ+DQogICAgIDx0ZCBhbGlnbj1jZW50ZXI+QmVnaW5uZXJzPC90ZD48dGQgYWxp Z249Y2VudGVyPkdyb3VwIExlc3NvbiBmb3IgQ2hpbGRyZW48L3RkPg0KICAgICA8dGQgYWxpZ249 Y2VudGVyPjY8L3RkPjwvdHI+PC90YWJsZT48L2JvZHk+PC9odG1sPg== --b5341808a7ca24ebd7b1bb68c5585a9d9--


where as in Yahoo I still get something like

Code: Select all

ICA8dGFibGUgYm9yZGVyPTEgYm9yZGVyY29sb3I9IzY2NjY2NiBjZWxscGFkZGluZz0zIGNlbGxz cGFjaW5nPTAgd2lkdGg9NzAwPg0KICAgPHRyPjx0ZCB3aWR0aD02MD48Yj5Td2ltbWluZyBDb21w bGV4PC9iPjwvdGQ+PHRkIHdpZHRoPTE1MCBhbGlnbj1jZW50ZXI+PGI+VGltZTwvYj48L3RkPjx0 ZCBhbGlnbj1jZW50ZXI+PGI+RGF5PC9iPjwvdGQ+PHRkIGFsaWduPWNlbnRlcj48Yj5MZXZlbDwv Yj48L3RkPg0KICAgPHRkIGFsaWduPWNlbnRlcj48Yj5BZ2UgR3JvdXA8L2I+PC90ZD48dGQgYWxp Z249Y2VudGVyPjxiPlVwZGF0ZWQgQ2xhc3MgU2l6ZTwvYj48L3RkPjwvdHI+PHRyPjx0ZD5CZWRv azwvdGQ+PHRkIGFsaWduPWNlbnRlcj45OjAwYW0gdG8gMTA6MDBhbTwvdGQ+PHRkIGFsaWduPWNl bnRlcj5TYXQ8L3RkPg0KICAgICA8dGQgYWxpZ249Y2VudGVyPkJlZ2lubmVyczwvdGQ+PHRkIGFs aWduPWNlbnRlcj5Hcm91cCBMZXNzb24gZm9yIENoaWxkcmVuPC90ZD4NCiAgICAgPHRkIGFsaWdu PWNlbnRlcj4zPC90ZD48L3RyPjx0cj48dGQ+QmVkb2s8L3RkPjx0ZCBhbGlnbj1jZW50ZXI+ODow MGFtIHRvIDk6MDBhbTwvdGQ+PHRkIGFsaWduPWNlbnRlcj5TdW48L3RkPg0KICAgICA8dGQgYWxp Z249Y2VudGVyPkJlZ2lubmVyczwvdGQ+PHRkIGFsaWduPWNlbnRlcj5Hcm91cCBMZXNzb24gZm9y IENoaWxkcmVuPC90ZD4NCiAgICAgPHRkIGFsaWduPWNlbnRlcj40PC90ZD48L3RyPjwvdGFibGU+ PC9ib2R5PjwvaHRtbD4=
victor
Forum Commoner
Posts: 65
Joined: Fri Feb 13, 2004 1:36 am

Post by victor »

the MIME class is working now as I managed to receive proper HTML attachments, however the $this->body i.e. "This is a test mail" does not appear in Yahoo but appears when I echoed build() on localhost and also the message seems to be truncated because I only received a partial HTML attachment as the text before a table is missing. I've been trying to figure out for hours, any assistance would be great.

Code: Select all

<?php
	function _build()
	{
	 $boundary = 'b'.md5(uniqid(time())); 
	 
	 if($this->from !="")
	 $ret = "From: ".$this->from ."\r\n";
	 
         $ret.= "MIME-Version: 1.0\r\n"; 
	 $ret.= 'Content-type:multipart/mixed; ';
	 $ret.= "boundary = $boundary\r\n\r\n";
	 $ret.= "This is a MIME encoded message.\r\n\r\n";
	 $ret.= "--$boundary";
          
	 $ret.= "Content-type: text/plain\r\n";
	 $ret.= "Content-Transfer-Encoding: 7bit\r\n\r\n";
	 $ret.= [b]$this->body[/b]."\r\n--$boundary"; 
         
         
	 	foreach($this->attachments as $attachment)
	 	{
	 	 $attachment['data']= base64_encode($attachment['data']);
	 	 $attachment['data']= chunk_split($attachment['data']);
	 	 
	 	 $TYPE = $attachment['type'];	 	 
	 	 $ENCODING = $attachment['encoding'];
	 	 $DATA = $attachment['data'];	
	 	 
	 	 if($attachment['filename']!="")
	 	 $FILENAME="name=".$attachment['filename'];
	 	 else
	 	 $FILENAME="";
  	
	 	 $data = "Content-type: ".$TYPE."\r\n".$FILENAME."\r\nContent-Transfer-Encoding: ".$ENCODING."
	 	 \r\nContent-Disposition: attachment\r\n".$DATA."\r\n";
	 	 
	 	 $ret.="\r\n".$data."\r\n--".$boundary;
	 	} 
	 	 $ret.="--\r\n";
	
	  	 
	  return($ret);
	 
	}
?>
User avatar
twigletmac
Her Royal Site Adminness
Posts: 5371
Joined: Tue Apr 23, 2002 2:21 am
Location: Essex, UK

Post by twigletmac »

Try removing:

Code: Select all

$attachment['data']= base64_encode($attachment['data']);
$attachment['data']= chunk_split($attachment['data']);
what do you get then?

Mac
victor
Forum Commoner
Posts: 65
Joined: Fri Feb 13, 2004 1:36 am

Post by victor »

I get this:

Code: Select all

µ¦åyº+uêÕº+uêÜ¢Z+®ºë®œzYii×bž7qée²–œŠxÓ
User avatar
twigletmac
Her Royal Site Adminness
Posts: 5371
Joined: Tue Apr 23, 2002 2:21 am
Location: Essex, UK

Post by twigletmac »

Oops, also meant to say, change this:

Code: Select all

$this->attachment("",$html,"text/html");
to

Code: Select all

$this->attachment('', $html, 'text/html', 'quoted-printable');
Mac
victor
Forum Commoner
Posts: 65
Joined: Fri Feb 13, 2004 1:36 am

Post by victor »

I received a binary data file in yahoo which can't be opened.
Post Reply