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:

function naploMail() {		
	
    $mail = new PHPMailer(true);
	$mail->From     = "tamas.szabo##kukac##hu.bosch.com";
	$mail->FromName = "GYBBON naplozas";
	//$mail->SMTPSecure="tls";
	//$mail->SMTPAuth	=true;
	$mail->Host     ="msxsmtp.server.bosch.com";
	//$mail->Host     = "rb-smtp-int.bosch.com";
	$mail->Mailer   = "smtp";
	$mail->Body    = iconv("UTF-8", "iso-8859-2",$szoveg);
	$mail->AltBody = "Helló";
	$mail->Subject = "GYBBON-naplo";
	$mail->AddAddress("gyetvang##kukac##gmail.com");
	$mail->AddAttachment($file=Document::$ABS_PATH.'naplo.log'); 
	return $mail->Send();
	}		

 function naploz() {
	global $NAPLOZAS;
	global $HIBA;
	global $NAPLO_MERET;
	if($NAPLOZAS!==true)
		return;
	$par=func_get_args();
	$szoveg="";
	$melyseg=0;
	tombImplode($par,$szoveg,$melyseg);	

	$file=Document::$ABS_PATH.'naplo.log';
	try {
		if (!file_exists($file) || (filesize($file)>$NAPLO_MERET)) {
			if (file_exists($file)){
				if (naploMail())
					;
	                    unlink($file);
                            }

...
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.

function naploMail() {        
      
    $mail = new PHPMailer(true);  
    $mail->From     = "tamas.szabo##kukac##hu.bosch.com";  
    $mail->FromName = "GYBBON naplozas";  
    //$mail->SMTPSecure="tls";  
    //$mail->SMTPAuth    =true;  
    $mail->Host     ="msxsmtp.server.bosch.com";  
    //$mail->Host     = "rb-smtp-int.bosch.com";  
    $mail->Mailer   = "smtp";  
    // szöveg változó nincs deklarálva, a body-d false-lesz, 
    // írj be simán valami szöveget és kész
    $mail->Body    = iconv("UTF-8", "iso-8859-2",$szoveg);  
    $mail->AltBody = "Helló";  
    $mail->Subject = "GYBBON-naplo";  
    $mail->AddAddress("gyetvang##kukac##gmail.com");  
    // felesleges értékadás, $file változót nem fogod használni többet
    $mail->AddAttachment($file=Document::$ABS_PATH.'naplo.log');   
    return $mail->Send();  
    }         
  
 function naploz() {  
    // globál? huh nem megyek bele, de szokj le róla
    global $NAPLOZAS;  
    global $HIBA;  
    global $NAPLO_MERET; 
    // feltétlnél, ciklusnál használj mindig {<kód>}  
    // ezt ajánlott meg tanulni: https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-2-coding-style-guide.md
    if($NAPLOZAS!==true)  
        return;  
    $par=func_get_args();  
    $szoveg="";  
    $melyseg=0;  
    tombImplode($par,$szoveg,$melyseg);   
  
    $file=Document::$ABS_PATH.'naplo.log';  
    try {  
        // ha nincs meg a fájl, vagy fájl mérete nagyobb mint X? Tuti jó?
        if (!file_exists($file) || (filesize($file)>$NAPLO_MERET)) {  
            if (file_exists($file)){  
                // itt az if után mi jön? nincs kód csak üres,
                // a try-nek a catch részét is küld be kérlek, illetve
                // itt tedd helyre a kódot
                if (naploMail())  
                    ;  
                        unlink($file);  
                            }  
  
...  
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..
 /**
   * Adds an attachment from a path on the filesystem.
   * Returns false if the file could not be found
   * or accessed.
   * @param string $path Path to the attachment.
   * @param string $name Overrides the attachment name.
   * @param string $encoding File encoding (see $Encoding).
   * @param string $type File extension (MIME) type.
   * @param string $disposition Disposition to use
   * @throws phpmailerException
   * @return bool
   */
  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
if (file_exists($file)){  
                if (naploMail())  
                    ;  
                        unlink($file);  
                            } 
Azt ugye látod, mi van ideírva.
if (file_exists($file)){  
  if (naploMail()) {
  }
  unlink($file);  
} 
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.