Tek-Tips is the largest IT community on the Internet today!

Members share and learn making Tek-Tips Forums the best source of peer-reviewed technical information on the Internet!

  • Congratulations Mike Lewis on being selected by the Tek-Tips community for having the most helpful posts in the forums last week. Way to Go!

How do I send attachments?

Sending and Receiving Email

How do I send attachments?

by  Glowball  Posted    (Edited  )
Script copied from Professional PHP Programming, Wrox Publishers

Put this into a file called
Code:
mime_mail.php
:

Code:
<?
class mime_mail {
	var $parts;
	var $to;
	var $from;
	var $headers;
	var $subject; 
	var $body;
	
	/*	
	*	void mime_mail()
	*	class constructor
	*/
	
	function mime_mail() {
		$this->parts = array();
		$this->to = "";
		$this->from = "";
		$this->subject = "";
		$this->body = "";
		$this->headers = "";
		}
		
	/* 	
	*	void add_attachment(string message, [string name], [string ctype])
	*	Add an attachment to the mail object
	*/
	
	function add_attachment($message, $name = "", $ctype = "application/octet-stream") {
		$this->parts[] = array (
			"ctype" => $ctype,
			"message" => $message,
			"encode" => $encode, 
			"name" => $name
			);
		}
		
	/*
	* 	void build_message(array part=
	*	Build message parts of a multipart mail
	*/
	
	function build_message($part) {
		$message = $part["message"];
		$message = chunk_split(base64_encode($message));
		$encoding = "base64";
		return "Content-Type: ".$part["ctype"].($part["name"]? "; name = \"".$part["name"]."\"" : "")."\nContent-Transfer-Encoding: $encoding\n\n$message\n";
		}
		
	/*
	*	void build_multipart()
	*	Build a multipart mail
	*/
	
	function build_multipart() {
		$boundary = "b".md5(uniqid(time()));
		$multipart = "Content-Type: multipart/mixed; boundary = $boundary\n\nThis is a MIME encoded message.\n\n--$boundary";

		for($i=sizeof($this->parts)-1; $i>=0; $i--) {
			$multipart .= "\n".$this->build_message($this->parts[$i])."--$boundary";
			}
			
		return $multipart .= "--\n";
		}
		
	/*
	*	string get_mail()
	*	returns the constructed mail
	*/
	
	function get_mail($complete = true) {
		$mime = "";
		if (!empty($this->from))
			$mime .= "From: ".$this->from."\n";
		if (!empty($this->headers))
			$mime .= $this->headers."\n";
			
		if ($complete) {
			if (!empty($this->to))
				$mime .= "To: ".$this->to."\n";
			if (!empty($this->subject)) 
				$mime .= "Subject: ".$this->subject."\n";
			}
			
		if (!empty($this->body))
			$this->add_attachment($this->body, "", "text/plain");
			
		$mime .= "MIME-Version: 1.0\n".$this->build_multipart();
		return $mime;
		}
		
	/*
	*	void send()
	*	Send the mail (last class-function to be called)
	*/
	
	function send() {
		$mime = $this->get_mail(false);
		mail($this->to, $this->subject, "", $mime);
		}
		
	}; // end of class
?>
Then include it in your file that needs to send email with attachments:
Code:
include "mime_mail.php";
Then call it like this:
Code:
$filename = "myfile.jpg";
$content_type = "image/jpeg";
$fd = fopen($filename, "r");
$data = fread($fd, filesize($filename));
fclose($fd);

$mail = new mime_mail;
$mail->from 	= "me@domain.com";
$mail->to 	= "someone@somewhere.com";
$mail->subject 	= "Email Subject";
$mail->body 	= "The body of the email would go here and can span multiple lines.";

$mail->add_attachment($data, $filename, $content_type);
$mail->send();
It can be used to send simple mail without attachments too, it's very flexible. Enjoy!
Register to rate this FAQ  : BAD 1 2 3 4 5 6 7 8 9 10 GOOD
Please Note: 1 is Bad, 10 is Good :-)

Part and Inventory Search

Back
Top