Funkce PHP Mail – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Funkce PHP Mail – PHP – Fórum – Programujte.comFunkce PHP Mail – PHP – Fórum – Programujte.com

 

Marp
~ Anonymní uživatel
1 příspěvek
29. 1. 2016   #1
-
0
-

Na hostingu je povolená funkce PHP Mail, na webu je emailový formulář s Captcha, po odeslání se objeví zpráva, že byl email odeslán, ale na daný email nic nepřijde. Zde je část kódu webu:

<?php
session_start();
if (!empty($_REQUEST['captcha'])) 
{
    if (empty($_SESSION['captcha']) || trim(strtolower($_REQUEST['captcha'])) != $_SESSION['captcha']) 
	{
        $oznameni= 'Opište prosím správně text z obrázku';
    } 
	else 
	{
	if($_SERVER["REQUEST_METHOD"] == "POST")
{
// promenne
$jmeno = $_POST["jmeno"];
$email = $_POST["email"];
$txt = $_POST["txt"];
$moje_adresa = "info@jeetkunedo.cz"; // zmente na svoji adresu
$predmet = "Informace o produktu"; // zde nastavite co bude uvedeno v predmetu
$zprava = ("Jméno: " . $jmeno . "\n\n" . "Text: \n" . $txt . "\n\nOdesílatel: " . $email);
// odeslani emailu
mail($moje_adresa,$predmet,$zprava);

$oznameni= 'Zpráva byla odeslána';
}
    }
    unset($_SESSION['captcha']);
}
?>


		<!-- Three -->
                <section id="three" class="wrapper">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<div style="margin:20px ">
<form method="post">
<fieldset>
  <legend>Kontaktujte nás:</legend>
<table>
	<tr><td colspan="2"><div style="width:300px;background:#F6F6F6; margin-bottom:20px"><?php echo $oznameni; ?></div></td>
	<tr><td>Jméno:</td><td><input type="text" name="jmeno" /></td></tr>
    <tr><td>E-mail:</td><td><input type="email" name="email" /></td></tr>
    <tr><td>Zpráva:</td><td><textarea name="txt" cols="50" rows="5"></textarea></td></tr>
    <tr><td colspan="2"><b>Opište prosím text z obrázku:</b></td></tr>
    <tr><td><input type="text" name="captcha" id="captcha-form" /></td><td><img src="captcha.php" id="captcha" /></td></tr>
    <tr><td colspan="2"><a href="#three" onclick="document.getElementById('captcha').src='captcha.php?'+Math.random();
		document.getElementById('captcha-form').focus();"id="change-image">Je obrázek nečitelný? Zkuste jiný!</a></td></tr>
</table>
<input type="submit" value="Odeslat"/>
</fieldset>
</form>
</div>
</body>
</html>
Nahlásit jako SPAM
IP: 85.71.100.–
peter
~ Anonymní uživatel
3981 příspěvků
29. 1. 2016   #2
-
0
-

- Funkce mail vraci true/false jestli byl mail odeslan z php. Ty tento stav nekontrolujes.
- Zkousel jsi ten kod spustit i na jinem hostingu?
- Do hlavicky mailu se vetsinou pridava kod, ze mail odesila php
- Nemas to ve spamu?
- Zkousel jsi pouzit priklad z online dokumentace php.net/mail? Tam by meli totiz aspon nektere fungovat na rozdil od nahodne zkopirovaneho kodu z internetu.

 Kdysi jsem si delal vlastni class, ktera vyuziva tez mail()

<?php
class classMail
{
public $uid;
public $sep_body;
public $sep_line;
public $head;
public $subj;
public $body;
public $tmp = array();
//private $log = null;

	function __construct()
	{
	$this->newMail();
	}

	function __destruct()
	{
	}

	public function newMail()
	{
	$this->tmp = array(
		'head'=>array(),
		'body'=>array()
		);
	$this->tmp['head'] = array(
		'from' => '',
		'to'   => '',
		'subj' => '',
		'notify' => false
		);
	}

//	function clear()
//	{
//	$this->head = array();
//	$this->body = array();
//	}

	public function addFrom($str)	{$this->tmp['head']['from'] = $str;}
	public function addTo($str)	{$this->tmp['head']['to']   = $str;}
	public function addSubj($str)	{$this->tmp['head']['subj'] = $str;}
	public function addBody($arr)
		{
		$pos  = strrpos($arr['path'],'/');
		$arr['file'] = $pos!==false ? substr($arr['path'],$pos+1) : $arr['path'];
		$this->tmp['body'][] = $arr;
		}
	public function addFile($path,$type='',$mime='')
		{
		$type = $type=='' ? 'file' : $type;
		$this->addBody(array('type'=>$type,'path'=>$path,'file'=>'','text'=>'','mime'=>$mime));
		}
	public function addText($msg,$path='')
		{
		$this->addBody(array('type'=>'text','path'=>$path,'file'=>'','text'=>$msg));
		}
	public function addHtml($msg,$path='')
		{
		$this->addBody(array('type'=>'html','path'=>$path,'file'=>'','text'=>$msg));
		}

	private function mailAddBody($item)	//$type='',$path='',$filename='',$message='',$mime=''
	{
	$body = array();
	if ($item['type']!='')
		{
		switch ($item['type'])
			{
			case 'text':
				{
				$mime   = 'text/plain';
				$body[] = 'Content-type:'.$mime.'; charset=utf-8';	//'Content-type: text/html; charset=iso-8859-1',
				$body[] = 'Content-Transfer-Encoding: quoted-printable';
				$body[] = '';
				if ($item['text']!='')
					{
					$body[] = $item['text'];
					}
				elseif (file_exists($item['path']))
					{
					$body[] = chunk_split(base64_encode(file_get_contents($path)));
					}
				else	{return;}
				break;
				}
			case 'html':
				{
				$mime   = 'text/html';
				$body[] = 'Content-type:'.$mime.'; charset=utf-8';
				$body[] = '';
				if ($item['text']!='')
					{
					$body[] = $item['text'];
					}
				elseif (file_exists($item['path']))
					{
					$body[] = chunk_split(base64_encode(file_get_contents($path)));
					}
				else	{return;}
				break;
				}
			case 'file':
				if (file_exists($item['path']))
					{
					$mime = $item['mime']=='' ? 'application/octet-stream' : $item['mime'];
					$body[] = 'Content-Type:'.$mime.'; name="'.$item['file'].'"';
					$body[] = 'Content-Transfer-Encoding: base64';
					$body[] = 'Content-Disposition: attachment; filename="'.$item['file'].'"';
					$body[] = '';
					$body[] = chunk_split(base64_encode(file_get_contents($item['path'])));
					}
				else	{return;}
				break;
			default: return;
				break;
			}
		}
	$this->body[] = $this->sep_body;
	$this->body[] = implode($this->sep_line, $body);
	$this->body[] = '';
	$this->body[] = '';
	}

	// $head = array('from'=>'','to'=>'','notify'=>true/false)
	private function createMail($head=array(),$body=array())
	{
	$this->uid = '--NextPart uid='.substr(sha1(uniqid(time())),0,20);
	$this->sep_body = '--'.$this->uid;
	$this->sep_line = PHP_EOL;	// "\r\n";
	$this->head = array();
	$this->head[] = 'From: '.$head['from'];
	$this->head[] = 'Reply-To: '.$head['from'];
	if ($head['notify']==true)
		{
		$this->head[] = 'Disposition-Notification-To: '.$head['from'];
		$this->head[] = 'Return-Receipt-To: '.$head['from'];
	//	$this->head[] = 'X-pmrqc: 1';
	//	$this->head[] = 'X-Confirm-Reading-To: '.$mail['from'];
	//	$this->head[] = 'Delivery-Status-Notification: '.$mail['from'];
		}
	$this->head[] = 'MIME-Version: 1.0';
	$this->head[] = 'X-Mailer: PHP/' . phpversion();
	$this->head[] = 'Content-Type: multipart/mixed; boundary="'.$this->uid.'"';
	$this->head[] = 'This is a multi-part message in MIME format.';
	$this->subj   = "=?UTF-8?B?".base64_encode($head['subj'])."?=";
	$this->body   = array();
//var_dump($body);
	foreach($body as $item)
		{
		$this->mailAddBody($item);
		}
	$this->body[] = $this->sep_body;
	$this->head = implode($this->sep_line, $this->head);
	$this->body = implode($this->sep_line, $this->body);
	//var_dump($this->head,$this->subj,$this->body);
	}
	
	public function send()
		{
		$head = $this->tmp['head'];
		if (       isset($head['from']) && $head['from']!==""
			&& isset($head['to'  ]) && $head['to'  ]!==""
			&& isset($head['subj']) && $head['subj']!==""
			&& count($this->tmp['body'])>0)
			{
			$this->createMail($head,$this->tmp['body']);
			return mail($head['to'], $head['subj'], $this->body, $this->head);
			}
		}
	}


	                                    	
				$mail = new classMail;
				$mail->addFrom($cfg_admin['mail']);
				$mail->addTo($mail_to);
				$mail->addSubj($subj);
				$mail->addText($msg);
				$bool = $mail->send();
				if ($bool)
					{$notice[] = 'odeslano';}
				else	{$notice[] = 'chyba';}
?>
Nahlásit jako SPAM
IP: 2001:718:2601:26c:2029:ac...–
peter
~ Anonymní uživatel
3981 příspěvků
29. 1. 2016   #3
-
0
-

Jo, jeste mne napada, v tom kodu nemas vubec error_reporting(). Bez toho to nezobrazi chybove hlasky php. Bez te chybove hlasky nema vubec smyl toto tema zakladat, pokud se nejaka zobrazi. A pokud se nezobrazi a mela by se, tak je treba prijit na to proc se nezobrazi. Cili, zapnout error_reporting a zkusit pouzit treba neexistujici promennou. echo $XYZ. Pokud to nevypise chybovou hlasku, tak je neco spatne.

Nahlásit jako SPAM
IP: 2001:718:2601:26c:2029:ac...–
Kit+15
Guru
29. 1. 2016   #4
-
0
-

#2 peter
Proč máš všechny atributy public, když mohou být private?

Nahlásit jako SPAM
IP: 194.228.68.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
peter
~ Anonymní uživatel
3981 příspěvků
1. 2. 2016   #5
-
0
-

OT: Protoze neumim objektove programovat? Trapi te to moc? Mne ani ne, hlavne, ze to funguje :)
Ted zrovna resim, jak otevrit na starsim pc v php 7 MB bmp po pixelu, aby to nezpracovaval 20s (ted to ctu ze souboru vlastni funkci). Puvodni kod s php funkcemi pro jpeg trval asi 40s. Jisty pokrok to je, ale stale to neni ocekavanych 5s :) Proste mne nebavilo cekat dlouho na vysledek testu...
V Qt cpp se mi podarilo implementovat jakysi picojpeg. cpp otevira obrazek za 0.21s, pres picojpeg s upravami tam mam 1.25s tusim. Proste, hrozne blizko. Php 40s!!! :)

Nahlásit jako SPAM
IP: 2001:718:2601:26c:e90d:da...–
Kit+15
Guru
1. 2. 2016   #6
-
0
-

#5 peter
PHP se na zpracování obrázků moc nehodí a už vůbec ne pixel po pixelu. Zkus si najít jinou vhodnou knihovnu.

Zkouším ten tvůj mailovací skript předělat k obrazu svému. Až to budu mít hotovo, pošlu to sem pro ukázku. Zatím jsem ho zkrátil asi o třetinu, ale chce to ještě kousek.

Nahlásit jako SPAM
IP: 194.228.68.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
peter
~ Anonymní uživatel
3981 příspěvků
2. 2. 2016   #7
-
0
-

Ok. Ono to neni vychytane. Proste jsem jednou potreboval odesilat maily s prilohou a s notifikaci. Tak jsem patral, jak se to dela. Podle popisu mi prislo nejlepsi si udelat vlastni knihovnu :) Aby nemela nesmysly kolem prevodu kodovani a pod. Nemam rad slozite veci, neprehledne, kde vetsinu funkci nevyuzijes.

Nahlásit jako SPAM
IP: 2001:718:2601:26c:10dc:6f...–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 4 hosté

Podobná vlákna

Funkce mail() — založil Mirek Braho

Wampserver - funkce mail — založil Tomáš

Znaková sada, funkce mail() — založil Corrosio

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý