ugrás a tartalomhoz

fájl csatolás, phpmailer

gyetvang · 2013. Júl. 23. (K), 23.54
Sziasztok,

egy szerveren fut egy programom,amely naplo fájlt is készít. 3 MB-nál törli magát és én szeretném ha törlés előtt megkapnám csatolt fájlként amailben.
A fájlt megkapom, de mire csatolja phpmailer a fájlt 61-szer küldi el a levelet.
LÁttam elég összetett megoldásokat, de abban bízok, hogy a phpmailernek van egy függvénye ami figyeli a fájl tényleges feltöltését.
Segítsetek benne, köszönöm Gyula
Kód:
  1. function naploMail() {        
  2.       
  3.     $mail = new PHPMailer(true);  
  4.     $mail->From     = "tamas.szabo##kukac##hu.bosch.com";  
  5.     $mail->FromName = "GYBBON naplozas";  
  6.     //$mail->SMTPSecure="tls";  
  7.     //$mail->SMTPAuth    =true;  
  8.     $mail->Host     ="msxsmtp.server.bosch.com";  
  9.     //$mail->Host     = "rb-smtp-int.bosch.com";  
  10.     $mail->Mailer   = "smtp";  
  11.     $mail->Body    = iconv("UTF-8""iso-8859-2",$szoveg);  
  12.     $mail->AltBody = "Helló";  
  13.     $mail->Subject = "GYBBON-naplo";  
  14.     $mail->AddAddress("gyetvang##kukac##gmail.com");  
  15.     $mail->AddAttachment($file=Document::$ABS_PATH.'naplo.log');   
  16.     return $mail->Send();  
  17.     }         
  18.   
  19.  function naploz() {  
  20.     global $NAPLOZAS;  
  21.     global $HIBA;  
  22.     global $NAPLO_MERET;  
  23.     if($NAPLOZAS!==true)  
  24.         return;  
  25.     $par=func_get_args();  
  26.     $szoveg="";  
  27.     $melyseg=0;  
  28.     tombImplode($par,$szoveg,$melyseg);   
  29.   
  30.     $file=Document::$ABS_PATH.'naplo.log';  
  31.     try {  
  32.         if (!file_exists($file) || (filesize($file)>$NAPLO_MERET)) {  
  33.             if (file_exists($file)){  
  34.                 if (naploMail())  
  35.                     ;  
  36.                         unlink($file);  
  37.                             }  
  38.   
  39. ...  
  40. azt gondoltam, hogy a sendMail akkor tér vissza ha sikerült a csatolás is már? de nem ez látszik          
 
1

Bele írtam a kódba, nem tudom

Kubi · 2013. Júl. 24. (Sze), 09.37
Bele írtam a kódba, nem tudom mi a konkrét hiba, de vannak érdekességek az eddig látott kódban, remélem nem csak összeollózod a programot valahonnan.
  1. function naploMail() {          
  2.         
  3.     $mail = new PHPMailer(true);    
  4.     $mail->From     = "tamas.szabo##kukac##hu.bosch.com";    
  5.     $mail->FromName = "GYBBON naplozas";    
  6.     //$mail->SMTPSecure="tls";    
  7.     //$mail->SMTPAuth    =true;    
  8.     $mail->Host     ="msxsmtp.server.bosch.com";    
  9.     //$mail->Host     = "rb-smtp-int.bosch.com";    
  10.     $mail->Mailer   = "smtp";    
  11.     // szöveg változó nincs deklarálva, a body-d false-lesz,   
  12.     // írj be simán valami szöveget és kész  
  13.     $mail->Body    = iconv("UTF-8""iso-8859-2",$szoveg);    
  14.     $mail->AltBody = "Helló";    
  15.     $mail->Subject = "GYBBON-naplo";    
  16.     $mail->AddAddress("gyetvang##kukac##gmail.com");    
  17.     // felesleges értékadás, $file változót nem fogod használni többet  
  18.     $mail->AddAttachment($file=Document::$ABS_PATH.'naplo.log');     
  19.     return $mail->Send();    
  20.     }           
  21.     
  22.  function naploz() {    
  23.     // globál? huh nem megyek bele, de szokj le róla  
  24.     global $NAPLOZAS;    
  25.     global $HIBA;    
  26.     global $NAPLO_MERET;   
  27.     // feltétlnél, ciklusnál használj mindig {<kód>}    
  28.     // ezt ajánlott meg tanulni: https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-2-coding-style-guide.md  
  29.     if($NAPLOZAS!==true)    
  30.         return;    
  31.     $par=func_get_args();    
  32.     $szoveg="";    
  33.     $melyseg=0;    
  34.     tombImplode($par,$szoveg,$melyseg);     
  35.     
  36.     $file=Document::$ABS_PATH.'naplo.log';    
  37.     try {    
  38.         // ha nincs meg a fájl, vagy fájl mérete nagyobb mint X? Tuti jó?  
  39.         if (!file_exists($file) || (filesize($file)>$NAPLO_MERET)) {    
  40.             if (file_exists($file)){    
  41.                 // itt az if után mi jön? nincs kód csak üres,  
  42.                 // a try-nek a catch részét is küld be kérlek, illetve  
  43.                 // itt tedd helyre a kódot  
  44.                 if (naploMail())    
  45.                     ;    
  46.                         unlink($file);    
  47.                             }    
  48.     
  49. ...    
6

Kód pontatlanság

gyetvang · 2013. Júl. 29. (H), 13.16
Köszönöm az építő kritikát,és a linket. A továbbiakban szigorúbban fogom követni a formai szabályokat.
Az általad szóvá tett hibák nagy részével tisztában voltam.
A GLOBAL változó nagyon kényszer megoldás volt azért használtam.
Az üres utasítást csupán azért raktam bele, mert azt hittem, hogy a PHPMAILER SendMail() függvény akkor tér vissza true értékkel, ha a levél elküldése sikeres, ez alatt azt is feltételeztem, hogy felcsatolja és elküldi a fájlt.
A HIBA az hogy a az emailt megkapom de a gmail-es fiókomba ugyanabban a percben 61-szer küldi el, és 1KB méeretű fájlokat csatol mind a 61-szer, holott a szóban forgó fájl egy darab 3 MB-os fájl.
Ha a fájl elérte a méretet törölnöm kell, csak szerettem volna előtte megkapni mailben.
2

Legközelebb érdemes lenne az

bamegakapa · 2013. Júl. 24. (Sze), 09.41
Legközelebb érdemes lenne az email címeket és hasonló nem publikus adatokat kicsillagozni.
3

Ha lenne like, likeolnám :)

Kubi · 2013. Júl. 24. (Sze), 09.43
Ha lenne like, likeolnám :)
5

+1

Pepita · 2013. Júl. 24. (Sze), 23.39
:) Ez miért nem jó?
7

Nem jól működik

gyetvang · 2013. Júl. 29. (H), 13.19
Fentebb leírtam, mit szerettem volna elérni.
Ezért fordultam hozzátok.
Van-e olyan függvény, amely figyeli, hogy a csatolás befejeződött-e, hogy csak azt követően, hívjam meg a sendMail függvényt?
9

van

szabo.b.gabor · 2013. Júl. 30. (K), 09.31
forrást megnézve..
  1. /** 
  2.   * Adds an attachment from a path on the filesystem. 
  3.   * Returns false if the file could not be found 
  4.   * or accessed. 
  5.   * @param string $path Path to the attachment. 
  6.   * @param string $name Overrides the attachment name. 
  7.   * @param string $encoding File encoding (see $Encoding). 
  8.   * @param string $type File extension (MIME) type. 
  9.   * @param string $disposition Disposition to use 
  10.   * @throws phpmailerException 
  11.   * @return bool 
  12.   */  
  13.  public function AddAttachment($path$name = ''$encoding = 'base64'$type = ''$disposition = 'attachment')  
nézd meg, hogy sikeresen lefut-e az AddAttachment, ha nem, akkor nézd meg mi a hiba.
10

Nálam ez csak logikailag

Hidvégi Gábor · 2013. Júl. 30. (K), 10.30
Nálam ez csak logikailag csatol.
4

if (file_exists($file)){

Poetro · 2013. Júl. 24. (Sze), 10.23
  1. if (file_exists($file)){    
  2.                 if (naploMail())    
  3.                     ;    
  4.                         unlink($file);    
  5.                             }   
Azt ugye látod, mi van ideírva.
  1. if (file_exists($file)){    
  2.   if (naploMail()) {  
  3.   }  
  4.   unlink($file);    
  5. }   
Azaz akár elküldte, akár nem törli a fájlt.
8

A Send() függvény hívja meg

Hidvégi Gábor · 2013. Júl. 29. (H), 14.36
A Send() függvény hívja meg közvetve a privát AttachAll() függvényt, ami akkor nem csatol semmit, ha bármelyik csatolmány kódolása sikertelen. Így elképzelhetőnek tartom, hogy valami olyan karakter kerül a logba, amit a(z alapértelmezett base64encode()) kódolófüggvény nem eszik meg.
11

Send

gyetvang · 2013. Aug. 1. (Cs), 13.27
Köszönöm szépen.
Nagy segítség volt. Valószínűleg az általad írt észrevétel lesz a hiba forrása.