![]() |
![]() |
merhaba arkadaşlar, phpmaileri kuramadım. indirdim dosyaları hosta attım ama bu scriptin kurulumu nasıl yapılıyor anlatabilirmisiniz? teşekkürler
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!";
}
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.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
<?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>
İkinci yöntemde, gönderdiğiniz mailleri kullanıcılarda görebileceğinden
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.
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 şekilde olmasını bende istemiyorum. tek tek bir metin belgesinden gönderilecek mail adreslerini çekse daha güzel olur ama nasıl :SKod:İkinci yöntemde, gönderdiğiniz mailleri kullanıcılarda görebileceğinden
$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
}
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.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
<?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
}
?>
<?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
}
// (...)
?>