Squirrelmail - levelezés - olvasási nyugta - PHP

Sziasztok!
Úgy tűnik, hogy a kedvenc szolgáltatóm levelező szervere nem hajlandó megemészteni a feladú nélküli "olvasási nyugtát" (RFC821). Mivel kicsit kicsinek érzem magam ahhoz hogy ezt bebízonyítsam, úgy gondoltam "belejavítok" a kódba. Sajna nem vagyok valami nagy PHP programozó és nem igazán tudom megetalálni a megfelelő mezőt. Addig eljutottam hogy a nyugta küldés az "src/read_body.php" állomány 454 -ik sorában meghívja a SendMDN() rutint (mindenféle paraméter nélkül?) ami ugyan ebben az állományban a 180 -ik sorban leledzik. Itt megrekedtem :(
Melyik mező is kellene módosítani? - látszólag mind kivan töltve.

Hozzászólások

"úgy gondoltam "belejavítok" a kódba."
Mielőtt a kódot módosítod (és esetleg hibásan működő SMTP-kliens lesz belőle), nézd meg az idevonatkozó RFC-ket. Ha a szolgáltatód által üzemeltetett SMTP szerver nem felel meg ezeknek, inkább szólj neki, mert valószínűleg nem csak az általad áhított MDN-ek kézbesítésével lesz baj.

"szolgáltatóm levelező szervere nem hajlandó megemészteni a feladú nélküli "olvasási nyugtát" (RFC821)"
A feladó alatt mit értesz? Az envelope (MAIL FROM:) részt az RFC 2821 (Simple Mail Transfer Protocol) tárgyalja, a header formátuma az RFC 2822 (Internet Message Format) alatt található. Az MDN pedig az RFC 3798 (Message Disposition Notification)-ban. Az üres From: mezőt mindegyik tiltja (erre a Return-Path: használható), míg az envelope lehet ilyen.

RFC 2821:
Syntax:

  "MAIL FROM:" ("<>" / Reverse-Path) [SP Mail-parameters] CRLF


RFC 2822:

from            =       "From:" mailbox-list CRLF
mailbox-list    =       (mailbox *("," mailbox)) / obs-mbox-list
mailbox         =       name-addr / addr-spec
name-addr       =       [display-name] angle-addr
angle-addr      =       [CFWS] "<" addr-spec ">" [CFWS] / obs-angle-addr
addr-spec       =       local-part "@" domain

obs-mbox-list   =       1*([mailbox] [CFWS] "," [CFWS]) [mailbox]
obs-angle-addr  =       [CFWS] "<" [obs-route] addr-spec ">" [CFWS]

The "Return-Path:" header field contains a pair of angle brackets that enclose an optional addr-spec.


return          =       "Return-Path:" path CRLF
path            =       ([CFWS] "<" ([CFWS] / addr-spec) ">" [CFWS]) / obs-path

RFC 3798:
3. Format of a Message Disposition Notification
"The From field of the message header of the MDN MUST contain the address of the person for whom the message disposition notification is being issued.

The envelope sender address (i.e., SMTP MAIL FROM) of the MDN MUST be null (<>), specifying that no Delivery Status Notification messages or other messages indicating successful or unsuccessful delivery are to be sent in response to an MDN."



A SquirrelMail (Debian Etch, 1.4.9a-2) látszólag jól küldi a DSN-t, az envelope MAIL FROM: üres, a header From: kitöltve, a Return-Path: az envelope alapján szintén üres a fenti RFC-knek megfelelően. Ha nálad mégsem így menne, akkor frissíts.

"Melyik mező is kellene módosítani? - látszólag mind kivan töltve."
Szerintem egyiket sem.

Szép! Rég találkoztam ilyen kimerítő és precíz válasszal!
KÖSZÖNÖM!
Mindazonáltal...
Outlook Express -nek nincs gondja - azaz mennek az olvasási nyugták!?
"Sima" Outlook -al nem próbáltam.
Az én rendszeremen nem megy!
Debian Etch
MTA: exim4 - smart host = smtp.upcmail.hu beállítással
courier-imap
Apache2 + PHP5 amire a squirrelmail van telepítve
Kifogástalanul működik, kivéve az olvasási nyugta küldést. A következő hibaüzeenet levelet kapom:

Message 1Koahs-0007AR-0v has been frozen (delivery error message).
The sender is <>.

The following address(es) have yet to be delivered:
én@freemail.hu: SMTP error from remote mail server after RCPT
TO:<én@freemail.hu>: host smtp.upcmail.hu [213.46.255.2]: 550 5.1.1
<én@freemail.hu> recipient rejected

Ha ugyanarra a levélre küldök egy "Válasz" levelet (az elejére beszúrom pl. hogy "Köszönöm megkaptam") Akkor gond nélkül megy.
Két lokális felhasználó között az olvasási nyugta simán megy. Úgy gondoltam, hogy a legegyszerűbben úgy tudnék meggyőződni hogy a UPC oldalán van a hiba, hogy kitöltöm a "sender" mezőt - akár valami kamu címmel - a lényeg hogy ez tűnik a legbiztosabb módszernek.
Persze, lehetne manuálisan email -t küldeni, lehetne elcsípni egy Outlook levelet, hogy ott mi van kitöltve és sok más, de ha egyszerűen beazonosítanám a kóüdban a mezőt és átmenetileg felülírnám valamivel, majd megnézném mi lessz a sorsa az tutinak tűnik.
Sajna nem vagyok elég jó ehhez :( Ebben kellene a segítség! Nem akarom megreformálni az RFC -t és értem hogy ennek működnie kéne, de nem működik és engem ettől fogva nem érdekel mit ír az RFC és a szolgáltatóval való viaskodás sem vonz.
Szóval, melyik mezőt is kellene módosítani? - látszólag mind kivan töltve.

* Én egy indián vagyok. Minden indián hazudik.

"és a szolgáltatóval való viaskodás sem vonz."
Ezt megértem, viszont az a helyzet, hogy az általad idézett hibaüzenet alapján a UPC SMTP időben utasítja vissza, ráadásul közvetlen az RCPT TO: után, a levélfejéc illetve a levéltörzs ismerete nélkül (szóval az előző topikban említett konfigváltozás nem lehet rá hatással). Ezért az olvasási visszaigazolás (MDN) és az általános kézbesítési problémák (DSN) eddig a részig azonosak. Azaz ha a UPC nem fogadja el az általad küldött MDN-t, akkor a DSN-t sem fogja. Tehát ha nem is viaskodást, de egy rövid kétsoros levelet érdemes lenne megejteni feléjük, az alábbi telnet kimenetét, és az említett RFC-re hivatkozva az idézeteket mellékelve.

"Outlook Express -nek nincs gondja"
Az Outlook Express (6.00.2900.5512) az eredeti levél címzettjét használja a MAIL FROM: után, és nem alkalmazkodik az előzőekben idézett RFC-kez. A SquirrelMail pedig megteszi. Viszont ez azt is jelenti, hogy aki nem Outlookkal (vagy hasonszőrű MUA-val) levelezik, hanem RFC-konform levelezővel, az is bele fog futni ebbe a problémába.

"...lehetne manuálisan email -t küldeni"
Én ezt javasolnám. Az Eximet futtató gépről nézzük meg:


  telnet smtp.upcmail.hu 25
  ehlo teszt
  mail from: <daily.tovis@freemail.hu>
  rcpt to: <daily.tovis@freemail.hu>
  rcpt to: <postmaster@upcmail.hu>
  rset
  mail from: <>
  rcpt to: <daily.tovis@freemail.hu>
  rcpt to: <postmaster@upcmail.hu>
  quit

A UPC nem köt bizonyos funkciókat bizonyos feltételekhez? Mint például reverse DNS megléte, a HELO/EHLO bejegyzett nevet használjon, SMTP auth. Ezek azért lehetnek érdekesek, mert ha kell, a HELO-n, autentikáción azonnal tudsz saját magad segíteni, reverse DNS-t tudsz kérni kb. 2 napon belül (a dyndns.ws létezik, de az általad használt hostnév jelenleg nem). Ha nem ezzel van összefüggésben, akkor egy levél a szolgáltatóhoz, és ha ez sem segít, akkor legyen helyi kódmódosítás.

"Ha ugyanarra a levélre küldök egy "Válasz" levelet ... Akkor gond nélkül megy."
Igen, mert akkor a MAIL FROM: a From: tartalámával fog megegyezni, ami valós SMTP cím.

"melyik mezőt is kellene módosítani?"
A headerben a Return-Path: lenne a megfelelő, de az nincs, és nem is használná az SMTP session során.

(Ha mégsem sikerülne a törekvésem, mely szerint a szolgáltatót kellene először megkérdezni, és ha onnan egyértelmű elutasítás jön, csak utána kódot módosítani, akkor kommentezd ki a $content_type-ot vizsgáló részt, és előreláthatólag az Outlook Expresshez hasonlóan fog működni.)

class/deliver/Deliver_SMTP.class.php (ha SMTP-t használsz a SquirrelMailben):


function initStream($message, $domain, $length=0, $host='', $port='', $user='', $pass='', $authpop=false) {
  ...
  ...
  ...
  // MAIL FROM: <from address> MUST be empty in cae of MDN (RFC2298)
  if ($content_type->type0 == 'multipart' &&
      $content_type->type1 == 'report' &&
      isset($content_type->properties['report-type']) &&
      $content_type->properties['report-type']=='disposition-notification') {
      // reinitialize the from object because otherwise the from header somehow
      // is affected. This $from var is used for smtp command MAIL FROM which
      // is not the same as what we put in the rfc822 header.
      $from = new AddressStructure();
      $from->host = '';
      $from->mailbox = '';
  }
  ...
  ...
  ...
  $fromaddress = ($from->mailbox && $from->host) ?
      $from->mailbox.'@'.$from->host : '';
  fputs($stream, 'MAIL FROM:<'.$fromaddress.">\r\n");
}

Jó, megpróbálom! Egyébként jó ideig nem működött, aztán váltottak (chello upcmail) akkor működött aztán megint elszállt :(
Az utolsó javítás, már sokkal durvább mint amier én gondoltam, egyébként csak akkor akartam volna élni vele ha nem boldogulok másképp.

* Én egy indián vagyok. Minden indián hazudik.

Kapcsolatban állok egy hostingolóval is - gond nélkül átdobtam hozzá a levelezést - ő lett az új smarthost. Így egyértelmű hogy a UPC túlszigorított!
Urak, hogy és kinek kell ilyen ügyben reklamálni? Én sosem reklamáltam ilyesmiért.

* Én egy indián vagyok. Minden indián hazudik.

"A feladó nélküli olvasási nyugtának akkor sincs értelme."
Pontosan ugyanaz az értelme, mint a DSN esetében, és a fent említett néhány RFC ezt írná elő. Az ezekben az RFC-kben leírtakat pedig az SMTP szerver üzemeltetők többsége elfogadja. Ha pedig valaki nem fogadja el, akkor ezzel egyben tudomásul veszi, hogy a többi RFC-konform dologgal nem lesz teljes az együttműködés, amire a szolgáltatást igénybevevő felhasználók reagálni fognak. A felhasználói panaszok kezelése pedig csak kisebb részben műszaki, nagyobb részben üzletpolitikai kérdés.

Egyébként szerinted miért nincs értelme?