WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   Email-forwarding via PHP fil (https://www.wn.se/forum/showthread.php?t=31505)

simphax 2008-08-29 17:17

Hej! Jag undrar hur man helt enkelt skulle kunna vidarebefordra ett mail med tillhörande bifogade filer mm till en annan mailadress via PHP. Anledningen till varför jag måste göra detta via PHP är att jag vill att användarna ska själv kunna ändra vilken mail de ska vidarebefordra till, och webbhotellet tillåter inte att direkt manipulera mail-inställningarna via PHP. Men däremot kan jag vidarebefordra alla mail till en PHP fil som jag sedan tänkt skulle kolla vilka inställningar användaren gjort och efter det vidarebefordra till rätt adress.

Hittills har jag kommit fram till denna kod enl. http://evolt.org/incoming_mail_and_p...s_per_page=50:
Kod:

<?php


// read from stdin
$fd = fopen("php://stdin", "r");
$email = "";
while (!feof($fd)) {
$email .= fread($fd, 1024);
}
fclose($fd);
// handle email
$lines = explode("\n", $email);
// empty vars
$from = "";
$subject = "";
$headers = "";
$message = "";
$splittingheaders = true;
for ($i=0; $i<count($lines); $i++) {
if ($splittingheaders) {
// this is a header
$headers .= $lines[$i]."\n";
// look out for special headers
if (preg_match("/^Subject: (.*)/", $lines[$i], $matches)) {
$subject = $matches[1];
}
if (preg_match("/^From: (.*)/", $lines[$i], $matches)) {
$from = $matches[1];
}
} else {
// e-mail body
$message .= $lines[$i]."\n";
}
if (trim($lines[$i])=="") {
// empty line, header section has ended
$splittingheaders = false;
}
}


$to = "[email protected]";

mail($to, $subject, $message ,"From: $from");
?>

Men denna kod ger ett mail innehållande liknande:(avsändare och rubrik är korrekt)
Citat:

------=_Part_5023_621368.1220018446891
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

test

--
// - Simon Nilsson -

------=_Part_5023_621368.1220018446891
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

<div dir="ltr">fdhjfdsghjkgfdsbdf gsdc<br clear="all">
--
// - Simon Nilsson -

</div>

------=_Part_5023_621368.1220018446891--

Och det är inte resultatet jag vill ha, utan jag vill ha med formatering och bilder och charset mm

emilv 2008-08-29 17:24

Ta med fler SMTP-headers! Det ultimata är att du tar med alla headers förutom To och Return-Path, och möjligen måste du även droppa alla Recieved-headers (eller lägga till en egen!).

Det är nämligen huvudet som berättar att det är ett brev av multipart-typ, vilken som är den första body-delen etc.

simphax 2008-08-29 17:33

okej hur menar du jag ska göra då?
om jag tar med alla headers i meddelandet, alltså (mail($to, $subject, $headers.$message ,"From: $from");)
blir detta vad som skickas:

Citat:

From [email protected] Fri Aug 29 17:27:55 2008
Received: from qw-out-1920.google.com ([74.125.92.148])
* * * by majestix.kontrollpanelen.se with esmtp (Exim 4.62)
* * * (envelope-from <[email protected]>)
* * * id 1KZ5tD-000Gxb-Nl
* * * for [email protected]; Fri, 29 Aug 2008 17:27:55 +0200
Received: by qw-out-1920.google.com with SMTP id 9so85968qwj.28
* * * for <[email protected]>; Fri, 29 Aug 2008 08:27:53 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
* * * d=gmail.com; s=gamma;
* * * h=domainkey-signature:received:received:message-id:date:from:to
* * * *:subject:mime-version:content-type;
* * * bh=1ARjS8MYHzEbAlk03uNOj3e6WRtm69Dbv4wws8ry7wA=;
* * * b=Bn+IOOEwcKopJPtvAfUsfIHFOLwYrObl+dc6MANwQYIcQf+Z tcQGO3hUqp9Klqj+mj
* * * *VpPKEUThJrucjsG5AkpNKpfttYcrDD9kDij+x6Oq9RRNdJ6vS iLy0vkVHm7Qtfz8Ez8D
* * * *re475XNn2KZuco9l/oEPP9VZjVE5SZK/M6H9E=
DomainKey-Signature: a=rsa-sha1; c=nofws;
* * * d=gmail.com; s=gamma;
* * * h=message-id:date:from:to:subject:mime-version:content-type;
* * * b=hPO/ku2Lxl65xgIvFhfElbHYNlA+JYsEXiBcWujfhI5BylgAXOREEO nV0hATM3oHYj
* * * *EqwmgvlWO+7e762RWAg0M6hr/UVrHWD1XJpiLHiXkHvagMglerBdZCLtBjzMBjHe+N7F
* * * *VVZvlUAg9zbGahEjgOpW9a2pZHbn2uAdJXDVk=
Received: by 10.214.181.19 with SMTP id d19mr3832388qaf.13.1220023673023;
* * * Fri, 29 Aug 2008 08:27:53 -0700 (PDT)
Received: by 10.70.15.3 with HTTP; Fri, 29 Aug 2008 08:27:52 -0700 (PDT)
Message-ID: <493b5e6a0808290827g524cd33ch13e049b6889e12f9@mail .gmail.com>
Date: Fri, 29 Aug 2008 17:27:52 +0200
From: "Simon Nilsson" <[email protected]>
To: [email protected]
Subject: =?ISO-8859-1?Q?NUD=C5?=
MIME-Version: 1.0
Content-Type: multipart/alternative;
* * * boundary="----=_Part_5975_14467733.1220023673002"

------=_Part_5975_14467733.1220023673002
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

JIPP

--
// - Simon Nilsson -

------=_Part_5975_14467733.1220023673002
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

<div dir="ltr"><span class="Apple-style-span" style="font-weight: bold;">JIPP</span><br clear="all">
--
// - Simon Nilsson -

</div>

------=_Part_5975_14467733.1220023673002--

Och det ser ju bara ännu värre ut ... ? :S

MMC 2008-08-29 17:41

Två rekommendationer: för att lösa ditt specifika problem, läs på om SMTP-protokollet och hur mail() används. Fundera dessutom på att istället använda PHPMailer för fler funktioner.

Den andra rekommendationen är att tänka om hur du löser det här. Om detta ska användas i någon som helst skala så blir det lätt ohållbart, du kan inte skriva en SMTP-server i PHP som är bättre än någon av de existerande, riktiga servrarna. Jag tror dessutom att ditt webbhotell lätt kan bli griniga då du definitivt kan bli spamklassad fort med ett sådant här beteende. Fundera istället på att skaffa en egen server eller VPS med en eller ett par egna IP-adresser och installera en riktig mejlserver som klarar av att vidarebefordra mejl och att använda en databas som datastore. Om du inte själv har kompetensen för att installera detta på rätt sätt så behöver det inte kosta många tusen att låta en konsult göra det, och du kommer att få ett oändligt mer stabilt och säkert upplägg.

Jonas 2008-08-29 22:32

Dom headers du behöver är:

Citat:

From: "Simon Nilsson" <[email protected]>
To: [email protected]
Subject: =?ISO-8859-1?Q?NUD=C5?=
MIME-Version: 1.0
Content-Type: multipart/alternative; boundary="----=_Part_5975_14467733.1220023673002"

Dom andra är headers som mailservern lägger till.


Varken mer, varken mindre.

simphax 2008-08-30 21:20

Tack för alla svar :) Jag har insett att det skulle bli för krångligt att försöka göra vidarebefordringar via PHP. Jag låter istället användaren få information om POP3-kontot så de kan vidarebefordra mailen den vägen

Jonas 2008-08-30 22:36

Citat:

Originally posted by simphax@Aug 30 2008, 21:20
Tack för alla svar Jag har insett att det skulle bli för krångligt att försöka göra vidarebefordringar via PHP. Jag låter istället användaren få information om POP3-kontot så de kan vidarebefordra mailen den vägen

Det är inte krångligare än vad man gör det till :)


Alla tider är GMT +2. Klockan är nu 05:35.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson