Newsletter mit Ahängen...

Sebigf

Erfahrenes Mitglied
Hallo zusammen!

Ich habe vor längerer Zeit einmal ein Newsletter-Script realisiert. Nun kam die Frage auf, wegen anhängen zu mitsenden.

Ich habe zwar etliche beispiele gefunden im netz aber keine so wirklich verständliche / anständige wie mir scheint.

Es geht eben darum, dass ein "absender" auch z.b. pdfs, zips usw mitsenden "könnte". Nur ich habe keinen schimmer, wie man das am besten umsetzen sollte.

Ich arbeite in meinem system auch mit bilderuploads, welche mit Imagemagick bearbeitet werden und deswegen ein "temp" ordner vorhanden ist. Was ich damit sagen möchte, es steht ein "temp" ordner zur verfügung, in den die dateien zwischengespeichert werden könnten, um sie dadurch schneller (efizienter) versenden zu können...

Hat einer eine Lösung für mich parat?
(Wichtig: Es muss verschiedene Dateitypen versenden können ...zip, rar, pdf...)
Das mit Datei(en) ist kein muss, es reicht auch, wenn man nur eine datei mitsenden kann...aber besser währe es, wenn es variabel bleiben würde :)

Danke!
 
Diese Thema wurde bereits ausgiebig behandelt. Such einfach mal in diesem Forum nach den Stichwörtern E-Mail und Anhang.
 
Ok, ich habe mich ca. 5 stunden mit dem thema befasst, und es geschaft :) Danke für deine antwort trotzdem ^^

Habe nurnoch eine Frage zum Thema....

Wie kann ich mehrere Files anhängen? Das ich sagen kann, max. 3 dateien usw. Eine Art array eben....


Danke ;)
 
Wenn du es geschafft hast, eine Datei anzuhängen, ist es nicht mehr weit. Teile den „Kuchen“ einfach in ein weiteres Stück.
 
Gutem Morgen!

mmh, klingt einleuchtend, aber ich kann gerade nicht rausfinden ob damit eine art array mit den files gemeint ist, und sich damit Content-Type wiederholt oder ob die datei an sich als "eins" zusammengefasst werden muss....

Bitte noch ein "kleines" Detail.... :)

## Nachtrag

Wie kann ich herausfinden, wie hoch das "senden-limit" ist? (also wieviel MB man ca. versenden kann im script) Oder gilt, was auf dem server ist, geht auch schnell raus?

Danke!
 
Immer wenn ich es so mache, wie ich es für "scheinbar" möglich halte, bekomme ich entweder immer eine mail ohne anhängen oder garkeine ;)

Bitte einen weiteren denkansatz.... :)
 
Erstmal: Bitte weiterhin auf Gross- und Kleinschreibung achten, die hast Du im letzten Post stark vernachlaessigt.
Ich hab vor einer Weile mal eine Mailklasse geschrieben, wenn ich mich erinnere hatte ich die auch schonmal gepostet.
Dort koennen so viele Dateien angehaengt werden wie man lustig ist.
Insbesondere die Funktion composemail() koennte fuer Dich interessant sein, denn dort wird eben, wie der Name schon sagt, die eigentlich eMail mit allen Headern und Daten zusammengesetzt.

email.class.php
PHP:
<?php
class email
{
	public $id;
	public $to;
	public $subject;
	public $body;
	public $from;
	public $cc;
	public $bcc;
	public $attachedfiles;

	public function __construct($to,$subject,$body,$from="",$cc="",$bcc="")
	{
		$this->id=md5(uniqid());
		$this->to=$to;
		$this->subject=$subject;
		$this->body=$body;
		$this->from=$from;
		$this->cc=$cc;
		$this->bcc=$bcc;
		$this->attachedfiles=array();
	}

	public function destroy()
	{
		if (file_exists("mailtemp/".$this->id))
			{
				for ($attachment=0;$attachment<count($this->attachedfiles);$attachment++)
					{
						unlink("mailtemp/".$this->id."/".$this->attachedfiles[$attachment]);
					}
				rmdir("mailtemp/".$this->id);
			}
	}

	private function composemail()
	{
		$body=imap_8bit($this->body);
		$body.="\n\n";
		/*for ($attachment=0;$attachment<count($this->attachedfiles);$attachment++)
			{
				$body.="\t".imap_8bit("<<".$this->attachedfiles[$attachment].">>");
			}*/
		$boundary="----".$this->id;
		$mail="";
		$mail.="Content-class: urn:content-classes:message";
		$mail.="\nUser-Agent: Free WebMail";
		$mail.="\nMIME-Version: 1.0";
		if (!empty($this->attachedfiles))
			{
				$mail.="\nContent-Type: multipart/mixed;\n\tboundary=\"".$boundary."\"";
			}
		if (!empty($this->from))
			{
				$mail.="\nFrom: ".$this->from;
			}
		if (!empty($this->cc))
			{
				$mail.="\nCc: ".$this->cc;
			}
		if (!empty($this->bcc))
			{
				$mail.="\nBcc: ".$this->bcc;
			}
		$mail.="\nX-Priority: 3 (Normal)";
		$mail.="\nImportance: Normal";
		if (!empty($this->attachedfiles))
			{
				$mail.="\n\n--".$boundary;
			}
		$mail.="\nContent-Type: text/plain;\n\tcharset=\"iso-8859-1\"";
		$mail.="\nContent-Transfer-Encoding: quoted-printable";
		$mail.="\nContent-Disposition: inline";
		$mail.="\n\n".$body;
		if (!empty($this->attachedfiles))
			{
				$mail.="\n\n--".$boundary;
			}
		for ($attachment=0;$attachment<count($this->attachedfiles);$attachment++)
			{
				$file=fopen("mailtemp/".$this->id."/".$this->attachedfiles[$attachment],"r");
				$content=fread($file,filesize("mailtemp/".$this->id."/".$this->attachedfiles[$attachment]));
				fclose($file);
				$encodedfile=chunk_split(base64_encode($content));
				$mail.="\nContent-Type: application/octet-stream;\n\tname=\"".$this->attachedfiles[$attachment]."\"";
				$mail.="\nContent-Transfer-Encoding: base64";
				$mail.="\nContent-Description: ".$this->attachedfiles[$attachment];
				$mail.="\nContent-Disposition: attachment;\n\tfilename=\"".$this->attachedfiles[$attachment]."\"";
				$mail.="\n\n".$encodedfile."\n\n--".$boundary;
			}
		if (!empty($this->attachedfiles))
			{
				$mail.="--";
			}
		return $mail;
	}

	public function attachfile($tempfile,$filename)
	{
		if (!file_exists("mailtemp/".$this->id))
			{
				mkdir("mailtemp/".$this->id);
			}
		move_uploaded_file($tempfile,"mailtemp/".$this->id."/".$filename);
		$this->attachedfiles[]=$filename;
	}

	public function removeattachment($filename)
	{
		unlink("mailtemp/".$this->id."/".$filename);
		$newattachedfiles=array();
		for ($attachment=0;$attachment<count($this->attachedfiles);$attachment++)
			{
				if ($this->attachedfiles[$attachment]!=$filename)
					{
						$newattachedfiles[]=$this->attachedfiles[$attachment];
					}
			}
		$this->attachedfiles=$newattachedfiles;
		unset($newattachedfiles);
	}

	public function showmail()
	{
		$mail="To: ".$this->to."\n";
		$mail.="Subject: ".$this->subject."\n";
		$mail.=$this->composemail();
		return $mail;
	}

	public function send()
	{
		imap_mail($this->to,$this->subject,"",$this->composemail());
	}
}

function mailstring($mailobject)
{
	return rawurlencode(serialize($mailobject));
}

function mailobject($mailstring)
{
	return unserialize(stripslashes(rawurldecode($mailstring)));
}
?>
 
Guten Morgen!
Ja, ich schreibe immer schnell und bin ehrlich gesagt zu faul :)

Zu deiner Antwort:

Sieht alles schon sehr gut aus, aber warum imap_mail() ? Ich habe im Moment eine Lösung mit mail(), was aber anscheinend nicht sehr große Anhänge versenden kann. Kann das sein?

Wo ist der Vorteil bei imap_mail() zu mail() ?

Danke

PS: Mit der groß / kleinschreibung werde ich mehr drauf achten ;) Danke
 
Zurück