İyinet'e Hoşgeldiniz!

Türkiye'nin En Eski Webmaster Forum'una Hemen Kayıt Olun!

Kayıt Ol!

Phpmailer kullanımı?

efekentli

0
İyinet Üyesi
Katılım
2 Şubat 2008
Mesajlar
843
Reaction score
2
merhaba arkadaşlar, phpmaileri kuramadım. indirdim dosyaları hosta attım ama bu scriptin kurulumu nasıl yapılıyor anlatabilirmisiniz? teşekkürler
 

K1R1A1LM1AS

0
İyinet Üyesi
Katılım
26 Ocak 2010
Mesajlar
126
Reaction score
9
Konum
Antalya
merhaba arkadaşlar, phpmaileri kuramadım. indirdim dosyaları hosta attım ama bu scriptin kurulumu nasıl yapılıyor anlatabilirmisiniz? teşekkürler

Kurulum yapmıyorsunuz, direk olarak zipini bir klasöre açıyorsunuz. Daha sonra, mail göndereceğiniz dosyayı, examples klasöründe ki, örneklerden bakarak, düzenliyorsunuz.

Örnek olarak, www klasörü sizin ana dizininiz ise, o kısım altında phpmailer isminde bir klasör oluşturun ve dosyaları oraya kopyalayın. Daha sonra, mailgonder.php isminde bir dosya oluşturup, test_sendmail_basic.php dosyasından aldığım ve ufak bir-iki düzeltme yaptığım, aşağıda ki metni, içine kopyalayın, bilgileri kendinize göre düzenleyin. Son olarak da, bu dosyayı www altına atıp, çalıştırmayı deneyin. Eğer "Message sent!" mesajını alırsanız, sorunsuzca mail gönderilmiş demektir.

PHP:
require_once('phpmailer/class.phpmailer.php');

$mail             = new PHPMailer(); // php standart olarak "mail()" kullanır
$mail->IsSendmail(); // sınıfa SendMail taşıyıcısını kullanmasını söylüyoruz

 // mailin metin bölümünü, bir html dosyasından çekiyoruz
$body             = file_get_contents('phpmailer/examples/contents.html');
if(version_compare(PHP_VERSION, '5.3.0', '<')) {
	$body             = eregi_replace("[\]",'',$body);
}
else {
	$body             = preg_replace("'[\/]'",'',$body);
}

// cevapların yazılmasını istediğimiz maili belirtiyoruz
$mail->AddReplyTo("[email protected]","First Last");
$mail->SetFrom('[email protected]', 'First Last');
$mail->AddReplyTo("[email protected]","First Last");

// mailin gönderileceği adresi belirtiyoruz
$address = "[email protected]";

// mailin başlık bilgilerini giriyoruz
$mail->AddAddress($address, "John Doe");
$mail->Subject    = "PHPMailer Test Subject via Sendmail, basic";
$mail->AltBody    = "To view the message, please use an HTML compatible email viewer!"; // mail içeriğini görüntülemek, test etmek için

// mesajın html içerikli olduğunu belirtiyoruz
$mail->MsgHTML($body);

// mailimiz içerisinde istersek, aşağıdaki gibi import edebiliyoruz
$mail->AddAttachment("phpmailer/examples/images/phpmailer.gif");      // attachment
$mail->AddAttachment("phpmailer/examples/images/phpmailer_mini.gif"); // attachment

if(!$mail->Send()) {
  echo "Mailer Error: " . $mail->ErrorInfo;
} else {
  echo "Message sent!";
}

NOT: Ben yukarıda verdiğim kodu kullanarak bir mail gönderdim, yani test edildi çalışıyor. Eğer, örnekte verdiğimden, farklı bir dizin kullanırsan, phpmailer olarak belirttilen adresleri de, kullandığın dizine göre, düzeltmen gerekecek.

Birde PHP 5.3.0 ile 6 arasında bir sürüm kullanıyorsan, class.phpmailer.php dosyasıyla ilgili bir hata mesajı alabilirsin. Eğer böyle bir hata alırsan, düzeltmek için, ilgili satırlara gidip "PHP_VERSION < 6" olarak belirtilen kısımları, "version_compare(PHP_VERSION, '5.3.0', '<')" ile değiştirmen gerekiyor.
 

efekentli

0
İyinet Üyesi
Katılım
2 Şubat 2008
Mesajlar
843
Reaction score
2
anlatımın için teşekkürler ederim. son olarak bir den fazla kullanıcıya gönderebilmek için ne yapmalıyım? örneğin bir listeye? (bu smtp server ayarlarını da açıklarsan sana zahmet çok memnun olurum) tekrar saol
 

K1R1A1LM1AS

0
İyinet Üyesi
Katılım
26 Ocak 2010
Mesajlar
126
Reaction score
9
Konum
Antalya
anlatımın için teşekkürler ederim. son olarak bir den fazla kullanıcıya gönderebilmek için ne yapmalıyım? örneğin bir listeye? (bu smtp server ayarlarını da açıklarsan sana zahmet çok memnun olurum) tekrar saol
Bunun içinde, iki farklı yöntem var, birincisi bir döngü yardımıyla, gelen mailleri tek tek göndermek veya tüm maillere $mail->AddAddress'a ekliyerek, tek seferde göndermek. İkinci yöntemde, gönderdiğiniz mailleri kullanıcılarda görebileceğinden ve SMTP adresinizin, spama düşmesine sebep olabileceğinden, pek tavsiye etmiyorum. SMTP ile ilgili bir örnek vereceğimden, bu sefer Examples klasöründe ki, test_smtp_basic.php dosyasını kullanıyorum. Yine önceki örnekte olduğu gibi, phpmailer dizinini hedef gösteriyorum. Ben bu dosya için, smtpmail.php ismini kullandım ama siz değiştirmek isterseniz, form'un name kısmınıda değiştirmeyi unutmayın. Mümkün olduğunca, kodların yanına açıklamasını yerleştirmeye çalıştım, yinede anlamadığınız yerler olursa sorabilirsiniz.

PHP:
<?php
// PHP'de ki tüm hataların loglanması için
error_reporting(E_STRICT);

// smtp bilgileri
$smtp_server = 'mail.yourdomain.com';
$smtp_port = '26';
$smtp_auth = true; // kimlik doğrulaması true=evet, false=hayır
$smtp_user = 'yourname@yourdomain';
$smtp_pass = 'yourpassword';

// gönderici bilgileri
$gonderen_isim = 'First Last Name';
$gonderen_mail = '[email protected]';

// mail genel bilgiler
$alici_isim = 'To Administrator'; // bunuda formdan almak mümkün, ben sabitledim
$mail_baslik = 'PHPMailer Test Subject via smtp, basic with authentication';
$mail_gidecekdosya = 'phpmailer/examples/contents.html';
$mail_eklentiresimler = array('phpmailer/examples/images/phpmailer.gif', 'phpmailer/examples/images/phpmailer_mini.gif');
$mail_toplugonder = false; // true=tüm maillere tek seferde yollar, false=hepsine tek tek yollar (bekleme süresi aktif olur)
$mail_beklemesuresi = 1; // iki mail arasında, x saniye bekle

// SMTP gönderimi için, geçerli zaman dilimini belirtiyoruz.
// Geçerli Liste: http://www.php.net/manual/tr/timezones.php
date_default_timezone_set('Europe/Istanbul');

require_once('phpmailer/class.phpmailer.php');

function emailgonder($smtp_server, $smtp_port, $smtp_auth, $smtp_user, $smtp_pass, $gonderen_isim, $gonderen_mail, $alici_isim, $alici_mail, $mail_baslik, $mail_gidecekdosya, $mail_eklentiresimler, $mail_toplugonder, $mail_beklemesuresi) {
	$mail = new PHPMailer();

	if (!empty($mail_gidecekdosya) AND file_exists($mail_gidecekdosya)) {
		// mailimizin, metin kısmını, harici bir dosyadan alıyoruz (harici bir dosya yerine, metinde girilebilir)
		$body = file_get_contents($mail_gidecekdosya);
		if(version_compare(PHP_VERSION, '5.3.0', '<')) { $body = eregi_replace("[\]",'',$body); }
		else { $body = preg_replace("'[\/]'",'',$body); }
	}
	else {
		// Eğer dosya yoksa veya string boşsa, bu mesajı yazdır
		$body = 'herhangi bir mesaj';
	}

	// Bu kısımda, SMTP erişimi sınanıyor, sadece sunucu adını değiştirseniz yeter
	$mail->IsSMTP(); // sınıfa SMTP kullanmasını söylüyoruz
	$mail->Host       = $smtp_server; // SMTP sunucu adı (kontrol için)
	$mail->SMTPDebug  = 2; // SMTP debug bilgilerini aktif yapıyoruz (test için) 1-hata, mesaj 2-sadece mesaj
	$mail->SMTPAuth   = $smtp_auth; // SMTP için kimlik doğrulaması true=aktif, false=pasif

	// SMTP için bağlantı bilgilerimizi giriyoruz
	$mail->Host       = $smtp_server; // SMTP sunucu adı
	$mail->Port       = $smtp_port; // SMTP portu - 26 sanırım Gmail sunucusu içinmiş
	$mail->Username   = $smtp_user; // SMTP hesap kullanıcı adı
	$mail->Password   = $smtp_pass; // SMTP hesap şifresi

	// Göndericinin mail adresi
	$mail->SetFrom($gonderen_mail, $gonderen_isim);

	// Mail için cevap yazılacak adres
	$mail->AddReplyTo($gonderen_mail,$gonderen_isim);

	// mailimizin başlığı
	$mail->Subject = $mail_baslik;

	// Eğer mevcut içeriğimiz görüntülenemez ise, gösterilecek alternatif mesaj
	$mail->AltBody    = "To view the message, please use an HTML compatible email viewer!";

	// mesaj içeriğinin, html tabanlı olduğunu belirtiyoruz
	$mail->MsgHTML($body);

	if ($mail_toplugonder) {
		$mailparca = explode($alici_mail);
		$mailparcasay = count($mailparca);

		for ($x=0; $x<$mailparcasay; $x++) {
			// mail gönderilecek kullanıcı
			$mail->AddAddress(trim($mailparca[$x]), $alici_isim);
		}
	}
	else {
		// mail gönderilecek kullanıcı
		$mail->AddAddress($alici_mail, $alici_isim);
	}

	if (!empty($mail_eklentiresimler)) {
		$resimsay = count($mail_eklentiresimler);
		for ($x=0; $x<$resimsay; $x++) {
			if (file_exists($mail_eklentiresimler[$x])) {
				// Eğer mevcutsa, import edilecek resim
				$mail->AddAttachment($mail_eklentiresimler[$x]);
			}
		}
	}

	if(!$mail->Send()) {
	  $durumraporu = "Mailer Error: " . $mail->ErrorInfo;
	} else {
	  $durumraporu = "Message sent!";
	}

	if (!$mail_toplugonder) {
		// Mailleri tek tek gönderiyor ise, diğer gönderimden önce bekletiyoruz
		$mail_beklemesuresi = intval($mail_beklemesuresi);
		sleep($mail_beklemesuresi);
	}

	// fonksiyonun sonucunu çıktı olarak veriyoruz
	return $durumraporu;
}

// Formdan Gönder butonuna basılmışsa, bu kısmı işlet
if (!empty($_POST["mailaktif"])) {
	// Formdan gelen mailler ayıklanıyor
	if ($mail_toplugonder) {
		$mailgonder = emailgonder($smtp_server, $smtp_port, $smtp_auth, $smtp_user, $smtp_pass, $gonderen_isim, $gonderen_mail, $alici_isim, $_POST["mail"], $mail_baslik, $mail_gidecekdosya, $mail_eklentiresimler, $mail_toplugonder, $mail_beklemesuresi);
		echo $mailgonder; // Mailin durumunu ekrana yazdırıyoruz
	}
	else {
		$mailparca = explode(';', $_POST["mail"]);
		$mailparcasay = count($mailparca);

		for ($i=0; $i<$mailparcasay; $i++) {
			$mailgonder = emailgonder($smtp_server, $smtp_port, $smtp_auth, $smtp_user, $smtp_pass, $gonderen_isim, $gonderen_mail, $alici_isim, trim($mailparca[$i]), $mail_baslik, $mail_gidecekdosya, $mail_eklentiresimler, $mail_toplugonder, $mail_beklemesuresi);
			echo $mailgonder.'<br /><br />'; // Mailin durumunu ekrana yazdırıyoruz
		}
	}
	?>
	<br /><br />
	<?PHP
}
?>

<form method="POST" action="smtpmail.php">
<textarea name="mail" style="width: 500px; height: 100px">[email protected]; [email protected]</textarea><br />
<input type="submit" name="mailaktif" value="Gönder" />
</form>

Not: Aynı anda çok fazla mail göndermek, smtp sunucunuzu veya mail adresinizi spama düşürecektir. O yüzden dikkatli kullanmanızı tavsiye ederim. Birde scripti sizin kullanacağınızı düşünerek, çok fazla güvenlik önlemi eklemedim (örneğin mail adresi doğruluğu gibi), bu tür ayrıntılarda, sorun yaşarsanız, yine yardımcı olmaya çalışırım.
 

efekentli

0
İyinet Üyesi
Katılım
2 Şubat 2008
Mesajlar
843
Reaction score
2
Kod:
İkinci yöntemde, gönderdiğiniz mailleri kullanıcılarda görebileceğinden
bu şekilde olmasını bende istemiyorum. tek tek bir metin belgesinden gönderilecek mail adreslerini çekse daha güzel olur ama nasıl :S


Birde scripti sizin kullanacağınızı düşünerek, çok fazla güvenlik önlemi eklemedim (örneğin mail adresi doğruluğu gibi), bu tür ayrıntılarda, sorun yaşarsanız, yine yardımcı olmaya çalışırım.

evet ben kullanıcam ama mail adresi doğruluğu olsa iyi olurdu. fakat bu işlem nasıl yapılıyor? eğer mail gönderme esnasında yapılıyor ise bu mail göndermeyi yavaşlatabilir sanırım. mailleri gönderdikten sonra kullanılmayan, yanlış adresleri loglayabilse bana yeterdi.

ayrıntılı açıklamalarınız için ve zaman ayırdığınız için tekrar teşekkürler
 

K1R1A1LM1AS

0
İyinet Üyesi
Katılım
26 Ocak 2010
Mesajlar
126
Reaction score
9
Konum
Antalya
Kod:
İkinci yöntemde, gönderdiğiniz mailleri kullanıcılarda görebileceğinden
bu şekilde olmasını bende istemiyorum. tek tek bir metin belgesinden gönderilecek mail adreslerini çekse daha güzel olur ama nasıl :S
Yukarıda hazırlamış olduğum script içinde, toplu ve tek tek gönderim içinde, örnek bulunuyor. Eğer mail adreslerini txtden çekmeyi planlıyorsanız, fopen fonksiyonu ile, txt dosyasını açıp, içeriğini bir stringe aktardıktan sonra, scriptte ki $_POST ifadesi ile değiştirmeniz yeterli olucaktır. Örneğin aşağıda ki içeriğe sahip, maillist.txt isimli bir txt dosyasınız olduğunu var sayalım.


Bu dosyayı, scripte bağlamak için, aşağıdaki kodu kullanabilirsiniz.

PHP:
$dosyaadi = 'maillist.txt';
if (file_exists($dosyaadi)) {
	if (filesize($dosyaadi) > 0) {
		$dosyaac = fopen($dosyaadi, 'r');
		// scriptteki $_POST["mail"] yerine, $dosyaoku yazılacak
		$dosyaoku = fread($dosyaac, filesize($dosyaadi));
		fclose($dosyaac);
	}
	else {
		// Dosya boyutu sıfırdan büyük olmalı
	}
}
else {
	// Dosya mevcut değil
}

evet ben kullanıcam ama mail adresi doğruluğu olsa iyi olurdu. fakat bu işlem nasıl yapılıyor? eğer mail gönderme esnasında yapılıyor ise bu mail göndermeyi yavaşlatabilir sanırım. mailleri gönderdikten sonra kullanılmayan, yanlış adresleri loglayabilse bana yeterdi.

ayrıntılı açıklamalarınız için ve zaman ayırdığınız için tekrar teşekkürler
Benim bahsettiğim mail kontrolü, mail adresinin düzgün girilip girilmediğiyle ilgiliydi, yazıyı biraz geç saatte hazırladığım için, herkezin bildiğini düşündüğüm, bazı konuların üstüne düşmek de istemedim. Mesala, adres kontolü için, şu komutu kullanabilirsiniz.

PHP:
<?PHP
$email = 'isim';

$pattern = '/^([a-z0-9])(([-a-z0-9._])*([a-z0-9]))*\@([a-z0-9])' .
'(([a-z0-9-])*([a-z0-9]))+' . '(\.([a-z0-9])([-a-z0-9_-])?([a-z0-9])+)+$/i';
if (preg_match ($pattern, $email)) {
    // email adresi geçerli, maili gönder
}
else {
    // email adresi geçersiz, iptal et
}

// veya PHP5 ve üzeri için aşağıdaki şekilde kullanabilrisin
// http://fr.php.net/manual/en/function.filter-var.php

if(filter_var($email, FILTER_VALIDATE_EMAIL)) {
    // email adresi geçerli, maili gönder
}
else {
    // email adresi geçersiz, iptal et
}
?>

Sizin bahsettiğiniz, aktif olmayan mail adreslerini öğrenmenin tek yolu, mail adresinizi kontrol edip, ulaşamayan maillerle ilgili (gönderdiğiniz mail ulaşamamışsa, SMTP sunucunuz mailin ulaşamadığına dair size geri bildirim yapar), başlıkları okumanızdır.
 

K1R1A1LM1AS

0
İyinet Üyesi
Katılım
26 Ocak 2010
Mesajlar
126
Reaction score
9
Konum
Antalya
Bir de scripte yerleştirilmiş, örneğini vereyim. İlgili, kısmı aşağıda ki şekilde değiştirmen yeterli.

PHP:
<?PHP
// (...)
// Formdan Gönder butonuna basılmışsa, bu kısmı işlet
if (!empty($_POST["mailaktif"])) {
    // Formdan gelen mailler ayıklanıyor
    
	$iptal = 0;
	$dosyaadi = 'maillist.txt';
	if (file_exists($dosyaadi)) {
		if (filesize($dosyaadi) > 0) {
			$dosyaac = fopen($dosyaadi, 'r');
			$dosyaoku = fread($dosyaac, filesize($dosyaadi));
			fclose($dosyaac);
		}
		else {
			$sebep = 'Dosya boyutu sıfırdan büyük olmalı';
			$iptal = 1;
		}
	}
	else {
		$sebep = 'Dosya mevcut değil';
		$iptal = 1;
	}
    
    if ($iptal == 0) {
	    if ($mail_toplugonder) {
	        $mailgonder = emailgonder($smtp_server, $smtp_port, $smtp_auth, $smtp_user, $smtp_pass, $gonderen_isim, $gonderen_mail, $alici_isim, $dosyaoku, $mail_baslik, $mail_gidecekdosya, $mail_eklentiresimler, $mail_toplugonder, $mail_beklemesuresi);
	        echo $mailgonder; // Mailin durumunu ekrana yazdırıyoruz
	    }
	    else {
	        $mailparca = explode(';', $dosyaoku);
	        $mailparcasay = count($mailparca);

	        for ($i=0; $i<$mailparcasay; $i++) {
	            $mailgonder = emailgonder($smtp_server, $smtp_port, $smtp_auth, $smtp_user, $smtp_pass, $gonderen_isim, $gonderen_mail, $alici_isim, trim($mailparca[$i]), $mail_baslik, $mail_gidecekdosya, $mail_eklentiresimler, $mail_toplugonder, $mail_beklemesuresi);
	            echo $mailgonder.'<br /><br />'; // Mailin durumunu ekrana yazdırıyoruz
	        }
	    }
	}
	else {
		echo $sebep;
	}
    ?>
    <br /><br />
    <?PHP

}
// (...)
?>
 

PhpCode

0
İyinet Üyesi
Katılım
5 Temmuz 2013
Mesajlar
122
Reaction score
0
İletişim bölümündeki formdan girilen bilgilerin bana mail olarak düşmesini istiyorum mantığını kurmamda yardımcı olur musunuz?
 

Türkiye’nin ilk webmaster forum sitesi iyinet.com'da forum üyeleri tarafından yapılan tüm paylaşımlardan; Türk Ceza Kanunu’nun 20. Maddesinin, 5651 Sayılı Kanununun 4. maddesinin 2. fıkrasına göre, paylaşım yapan üyeler sorumludur.

Backlink ve Tanıtım Yazısı için iletişime geçmek için Skype Adresimiz: .cid.1580508955483fe5

Üst