Avatar billede farmer Nybegynder
08. maj 2001 - 17:34 Der er 16 kommentarer og
1 løsning

Return-Path setting ved mail()

Hejsa

Jeg sidder med et lille problem, som efterhånden er ved at vokse sig stort. Ved brug af php\'s mail() kan jeg ikke fange returmail, forårsaget af manglende host eller manglende user.

Jeg skal ændre min Return-Path, men kan ikke hitte ud af det.

Fx. dur dette ikke:
mail(
\"Anders@tillebech.dk\",
\"$text\", \"$body\",
\"From: sk@it-c.dk\\n
  Reply-to: sk@it-c.dk\\n
  Return-Path: sk@it-c.dk\");

Jeg har ikke adgang til serveren, som tolker scriptet.
Avatar billede Thomas Nybegynder
08. maj 2001 - 17:38 #1
Svjv skal man da have mailheaders FØR selve indholdet i e-mailen .. måske er det det som driller?
Avatar billede farmer Nybegynder
08. maj 2001 - 17:44 #2
Nej, funktionen \"mail()\" tager disse argumenter i denne rækkefølge:

mail(\"modtager@af.mailen\", \"titel\", $message,
    \"From: din@adresse.dk\\nReply-To: din@returadresse.dk\\nAndetTingelTangelIHeader\");

Du kan læse mere på: http://www.php.net/manual/en/function.mail.php
Avatar billede ghanic Nybegynder
08. maj 2001 - 17:58 #3
Dette gælder kun for UN*X.

Return-Path (RP) sættes af sendmail. Du skal køre sendmail -f for at ændre RP.

Dette kan du gøre på to måder:

1. Ændre sendmail_path i php.ini til
/usr/sbin/sendmail -f sk@it-c.dk -t -i
(eller anden path til sendmail)
Herefter kan du kalde mail() uden RP i headers.

2. Droppe mail og kalde sendmail direkte. Det gør du sådan.
a. Opret tekstfil ved navn \"fisk\" sådan:
=======snip========
From: sk@it-c.dk
Reply-to: sk@it-c.dk
Subject: --- dit subject her----
To: Anders@tillebech.dk
X-Envelope-To: Anders@tillebech.dk

--- din tekst her---
=======unsnip========
b. Køre php-kommandoen:
`cat fisk | /usr/sbin/sendmail -f sk@it-c.dk -t`;
alternativt:
system(\"cat fisk | /usr/sbin/sendmail -f sk@it-c.dk -t\");
alternativt
exec(\"cat fisk | /usr/sbin/sendmail -f sk@it-c.dk -t\");

I begge tilfælde får du en X-Authentication-Warning: server: user set sender to sk@it-c.dk using -f


Jeg har kun testet metode 2. Jeg tror imidlertid kraftigt at metode 1 også virker.


Avatar billede farmer Nybegynder
08. maj 2001 - 18:11 #4
Tak for svaret. Jeg forstår det ikke helt må jeg indrømme. Jeg går fluks igang med at læse om sendmail()
Jeg roder lige med det, og vender så tilbage med dine point. Hvis du har et godt link til noget info om denne sag, så tager jeg imod med kyshånd.

Vil dette virke når man ikke er andet end almindelig bruger af systemet? Det er min skoles computer.

Mange hilsner
Farmer
Avatar billede farmer Nybegynder
08. maj 2001 - 18:12 #5
Skolens server mener jeg......
Avatar billede ghanic Nybegynder
08. maj 2001 - 18:14 #6
sendmail er et meget kompliceret program. Der er ingen sendmail() funktion.
Det er muligt at det vil virke for en almindelig bruger. Det afhænger af systemadministratoren på skolen. Du kan jo prøve.

Hvis du er i tvivl, så prøv løsning nummer 2. Det er den nemmeste. DER ER DESUDEN EN FEJL i metode 2.

I stedet for
system(\"cat fisk | /usr/sbin/sendmail -f sk@it-c.dk -t\");

skal du bruge

system(\"cat fisk | /usr/sbin/sendmail -f sk@it-c.dk -t Anders@tillebech.dk \");
Avatar billede ghanic Nybegynder
08. maj 2001 - 18:15 #7
Såfremt php kører i safe mode, kan du slet ikke gøre det. Du kan se om php kører i safe mode ved at køre en <? phpinfo(); ?>
Avatar billede alvion Nybegynder
08. maj 2001 - 18:27 #8
Dine headers skal ikke kun være adskilt af et \"\\n\" men \"\\r\\n\". Dette gælder, uanset om du kører scriptet på en Unix maskine eller en Windows.

Prøv lige det, inden du ændrer hele din opsætning.
Avatar billede ghanic Nybegynder
08. maj 2001 - 18:40 #9
alvion: Et hurtigt kig på RFC821 fra August 1982 viser at du har ret. Headers skal adskilles med \\r\\n. sendmail er imidlertid ligeglad. Og det ændrer ikke Return-Path.

Sjov læsning:
http://www.cip1.uni-hannover.de/~brunkhor/projekte/nntp-proxy/rfc/rfc821.txt
Avatar billede ghanic Nybegynder
08. maj 2001 - 18:45 #10
alvion: Endnu et kig på php.net viser at logikken nok nærmere ligger i mail() frem for sendmail.

Officielt eksempel:

mail(\"nobody@aol.com\", \"the subject\", $message,
    \"From: webmaster@$SERVER_NAME\\nReply-To: webmaster@$SERVER_NAME\\nX-Mailer: PHP/\" . phpversion());

http://www.php.net/manual/en/function.mail.php
Avatar billede alvion Nybegynder
08. maj 2001 - 18:57 #11
\"\\r\\n\" skulle gerne virke med mail() funktionen - jeg bruger det i hvert fald selv.
Avatar billede ghanic Nybegynder
08. maj 2001 - 19:00 #12
Utroligt hvad man finder, hvis man læser nøje:

Fra: http://www.php.net/manual/en/function.mail.php

With the fifth parameter you can set additional command line parameters to the actual mailer. In the example below we set the correct Return-Path header for sendmail. Normally sendmail will add the X-Authentication-Warning header when using the -f parameter, because the webserver user is probably not a member of the trusted users. To suppress this warning, you should add the web server user to the trusted users in your sendmail config file.

Note: This fifth parameter was added in PHP 4.0.5.

Example 3. Sending mail with extra headers and setting an additional command line parameter.

mail(\"nobody@aol.com\", \"the subject\", $message,
    \"From: webmaster@$SERVER_NAME\", \"-fwebmaster@$SERVERNAME\");


Så det kan godt lade sig gøre med mail(), hvis du bruger php 4.0.5...
Avatar billede farmer Nybegynder
08. maj 2001 - 23:33 #13
Hej igen. Jeg er lige inde på siden, og ser debatten, som har kørt. Interessandt. Desværre har jeg først tid til at rode med det på fredag, så da må jeg igang igen.

Jeg havde læst ovenstående, men troede ikke, at det ville virke når jeg ikke var (og ikke kan blive) en \"trusted user\". Hvis det hele bare står og falder med en advarsel af en type, men alligevel ændrer Return-Pathen, så kommer det hele til at køre fint.

På den side, vi alle har linket til fandt jeg:

Want to know how to configure the Return-Path header?
Say that you usually send mail with the PHP mail() function as such:
mail($toaddress,$subject,$body,$headers);
where $headers includes \"From: $fromaddress\\n\" among other things.
use this function

<pre>
function mailfrom($fromaddress, $toaddress, $subject, $body, $headers) {
$fp = popen(\'/usr/sbin/sendmail -f\'.$fromaddress.\' \'.$toaddress,\"w\");
if(!$fp) return false;
fputs($fp, \"To: $toaddress\\n\");
fputs($fp, \"Subject: $subject\\n\");
fputs($fp, $headers.\"\\n\\n\");
fputs($fp, $body);
fputs($fp, \"\\n\");
pclose($fp);
return true;
}
</pre>
Avatar billede ghanic Nybegynder
09. maj 2001 - 00:16 #14
Det er metode 2 med popen() i stedet for system()...
Avatar billede farmer Nybegynder
12. maj 2001 - 16:06 #15
Hej Alvion.
Jeg har prøvet at ændre \\n til \\r\\n, men der er  ingen forskel, så det er ikke det; desværre. Men tak for svaret.

Ghanic.
Jeg har endnu ikke testet sendmail, men hvis det er et ekstra program til Linux, så tror jeg, at jeg får problemer pt. da skolens server - naturligvis - køres restriktivt.
Avatar billede farmer Nybegynder
12. maj 2001 - 16:09 #16
Ghanic
Jeg skal nok få det testet (om en uges tid, undskyld-undskyld-undskyld...), og så får du dine point udbetalt.
Avatar billede farmer Nybegynder
30. maj 2001 - 14:39 #17
Jeg var midt i et projekt, hvor det var essentielt at ændre Return-Path. Jeg fik i stedet adgang til mit studiesteds returmails, så jeg undgik det.

Jeg har derfor heller ikke testet, om din løsning virker på en server, hvor man ikke er trusted user, men det skal ikke komme dig til last. Du får dine point, og jeg må prøve din løsning engang i sommerferien. Det nemmeste er nu nok bare, at bruge php 4.0.5 - hvilket jeg ikke gør pt, og som sikkert er derfor, at mit script ikke virker.

Tak for svarene
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester