xranzei 1
xranzei
quickxd 1
quickxd
noisiv 1
noisiv
Manwe Work 1
Manwe Work
Scarlet 1
Scarlet
Hikaye Ekle

PHP ile SMTP’den Mail Gönderme

  • Konuyu başlatan Konuyu başlatan VolkanParlak
  • Başlangıç tarihi Başlangıç tarihi
  • Cevaplar Cevaplar 2
  • Görüntüleme Görüntüleme 1K

HERAKLES Otomatik Avlı kalıcı sunucu. 19 Haziran'da açılıyor. Atius & Wizard güvencesiyle hemen kayıt ol, ön kayıt ödülleri aktif. HEMEN TIKLA!

gmail.png


Bundan önceki mail formu yapımı yazımda normal mail fonksiyonu ile mail göndermeyi anlatmıştım. Şimdi o yönteme alternatif ve daha etkili olan SMTP ile mail göndermekten bahsedeceğim.


SMTP (Simple Mail Transfer Protocol) Elektronik posta gönderme protokolüdür. PHP’nin normal mail fonksiyonuyla genelde server adına ve herhangi bir doğrulama yapmadan istediğimiz bir gönderen adresi tanımlayarak göndermeye çalışıyoruz, SMTP’de ise maili gönderebilmek için gerçek bir mail hesabına ihtiyacımız var. Mail fonksiyonuna kıyasla bu şekilde gönderilen maillerin doğruluğu ve güvenilirliği daha yüksek olduğu için spam (önemsiz) klasörlerine düşme olasığı da azdır.


Ayrıca yazının resmini öylesine Gmail yapmadım. SMTP ile kendi sunucunuzdan başka mail hesaplarınız adına da mail atabiliyorsunuz, ki ben bu yöntemi özellikle bu amaç için kullanıyorum. Kendi mail sunucumu kullanmak yerine kendi domainimin mail DNS (MX) ayarlarını Gmail’e yönlendirip SMTP ile mail gönderiyorum (Bu konuyla alakalı detaylı bilgi için tıklayın). Bu sayede gönderdiğim mesajların spama düşmesi gibi bir durum söz konusu olmuyor.


PHP SMTP Sınıfı: PHPMailer


Bu olay için sıfırdan nasıl kodlanacağını değil, var olan çok özellikli açık kaynak SMTP sınıfını nasıl kullanacağımızı göstereceğim. Bu güzel sınıfa şu adresten ulaşıp şuralardan güncel sürümünü indirebilirsiniz.

Kullanımı inanın gayet basit ve mail olaylarıyla alakalı istediğiniz her şeyi yapmak mümkün (dosya göndermek, birden fazla alıcı eklemek, yanıt adresini değiştirmek vs.)


Mail Göndermek


PHPMailer sınıfı ile SMTP mail göndermek için “class.phpmailer.php” ve “class.smtp.php” dosyalarını alıp ve aşağıdaki kod bloğunu kullanmanız yeterli. İlgili yerlere kendi sunucunuzun host, port ve kullanıcı adı şifre bilgilerinizi girin.

include 'class.phpmailer.php';
$mail = new PHPMailer();
$mail->IsSMTP();
$mail->SMTPAuth = true;
$mail->Host = 'smtp.sitem.com';
$mail->Port = 587;
$mail->Username = 'benim@adresim.com';
$mail->Password = 'çokgizlişifre';
$mail->SetFrom($mail->Username, 'Benim Adım');
$mail->AddAddress('alici@adresi.com', 'Alıcının Adı');
$mail->CharSet = 'UTF-8';
$mail->Subject = 'Mail Başlığı';
$mail->MsgHTML('Mailin içeriği!');
if($mail->Send()) {
echo 'Mail gönderildi!';
} else {
echo 'Mail gönderilirken bir hata oluştu: ' . $mail->ErrorInfo;
}

Olay bu kadar düzenli ve basit. Eğer yukarıda da bahsettiğim gibi kendi sunucunuzu kullanmak yerine varolan Gmail hesabınız ile bu olayı kullanmak istiyorsanız yukarıdaki host ve port bölümü aşağıdaki gibi değiştirin:

$mail->Host = 'smtp.gmail.com';
$mail->Port = 587;
$mail->SMTPSecure = 'tls';

Mail ile dosya göndermek

Göndereceğiniz mailin içerisine dosya eklemek için AddAttachment metodunu kullanacağız. Örneğin bir resim göndermek için:

$mail->AddAttachment('img/gonderilecek_resim.jpg');

Bu kadar basit.

Birden fazla kişiye gönderme

Birden fazla alıcı eklemek için ekstra bir şeye ihtiyaç yok. Yukarıda alıcı adresi tanımladığımız AddAddress metodunu tekrar kullanabiliriz. Ama eğer CC ya da BCC eklemek istiyorsanız onun için de AddCC ya da AddBCC metodlarını kullanmanız yeterli.

$mail->AddAddress('baska@biri.com', 'Başkası');
$mail->AddCC('baska@iki.com', 'Diğeri');
$mail->AddBCC('baska@ucu.com', 'Öteki');

Yeri gelmişken CC ile BCC arasından da bahsetmek gerekirse; CC: “Carbon Copy” yani bir kopyasını da bu şekilde eklenmiş adreslere gönderir. BCC: “Blend Carbon Copy” CC ile aynı tek farkı buraya yazılan adresler diğer gönderilen kişilerde gözükmez.

Yanıt adresini değiştirme

Eğer gönderdiğiniz adrese değilde başka bir adrese cevap yazılmasını istiyorsanız AddReplyTo metodu ile cevap atılmasını istediğiniz mail adresini yazmanız yeterli.

$mail->AddReplyTo('cevaplar@buraya.com', 'Cevapçı');

Bu sınıf hakkında daha fazla bilgi ve örnek çalışma için bakabilirsiniz.


Spamsız mailler dileğiyle, bir başka PHP serüveninde görüşmek üzere hoşçakalın!
 
hocam guzelanlatmıssınız ama ben yapamadım heralde maiiler dosyası vardı ındırdım ftp anadızıne attım ve ayarlarından sadece

maıl adres ve sıfremı yazdım

Mail.php

Kod:
<?
require("class.phpmailer.php");

$mail = new PHPMailer();

$mail->IsSMTP();
$mail->SMTPDebug = 2; //Mesaj gönderme bşarısız olursa sayfada çıkacak hatanın detayın belirtir 2 yaparsanız tüm hataları gösterir 0 yaparsanız ekranda sadece mesaj gönderilemedi yazısı ve mailler error hatası yazar.
$mail->SMTPAuth = true;
$mail->SMTPSecure = "tls";       // send via SMTP
$mail->Host     = "smtp.gmail.com"; // SMTP servers
$mail->Port = 587;    // turn on SMTP authentication
$mail->Username = "[COLOR="#FF0000"]gmailadresiniz@gmail.com[/COLOR]";  // SMTP username
$mail->Password = "[COLOR="#FF0000"]gmailsifreniz[/COLOR]"; // SMTP password

$mail->From     = "gmailadresiniz@gmail.com"; // smtp kullanıcı adınız ile aynı olmalı
$mail->FromName = "gönderennin ismi";
$mail->AddAddress("gönderilecek adres","gönderilenin ismi");
$mail->Subject = "Konu başlığı";
$mail->Body = 'Mesaj içeriği.';

if(!$mail->Send())
{
   echo "Mesaj Gönderilemedi <p>";
   echo "Mailer Error: " . $mail->ErrorInfo;
   exit;
}

echo "Mesaj Gönderildi";


?>
:

kırmızı olan yerı kendime gore edıtledim


Sonra custom php ye eklemede yaptım kendı ayar dosyam

Kod:
$mail->Username = "[COLOR="#FF0000"]gmailadresiniz@gmail.com[/COLOR]";  // SMTP username
$mail->Password = "[COLOR="#FF0000"]gmailsifreniz[/COLOR]"; // SMTP password


sonrasında bu yarları şifremi unuttum php vs php dosyasının arasına su kodları ekledım

şifremi unuttum php buna ekledım ama mail gelmiyor nerde yanlıs yapıyorum?


Kod:
<!-- center column -->
            <div id="register" class="col-2">
    <div class="content content-last">
        <div class="content-bg">
            <div class="content-bg-bottom">
            <div class="textblock">
        <h2>Şifremi Unuttum!</h2>

              
              <br class="clearfloat" />
  <div class="inner-form-border">
                <div class="inner-form-box">
                    <h3><a id="toLogin" href="index.php?s=login" title="Giriş Yap">yada kullanıcı paneline git </a></h3>
                    <div class="trenner"></div> 
					<p></p>
				[COLOR="#FF0000"]	<? require("mail/class.phpmailer.php"); ?>
<?PHP[/COLOR]

  if(isset($_POST['sfform']) && $_POST['sfform']=="Gonder!") {
  
    if(!empty($_POST['account']) && !empty($_POST['sicherheitsf']) && !empty($_POST['sicherheitsa'])) {
  
      $acc = mysql_real_escape_string($_POST['account']);
      $frage = mysql_real_escape_string($_POST['sicherheitsf']);
      $antwort = mysql_real_escape_string(md5($_POST['sicherheitsa']));
      
      $sqlCmd = "SELECT id FROM account.account WHERE login='".$acc."' AND question1='".$frage."' AND answer1='".$antwort."' LIMIT 1";
      $sqlQry = mysql_query($sqlCmd,$sqlServ);
      
      if(mysql_num_rows($sqlQry)>0) {
        
        $newPass = substr(md5(rand(999,99999)),0,8);
        $setPass = "UPDATE account.account SET password=PASSWORD('".$newPass."') WHERE login='".$acc."' LIMIT 1";
        $qryPass = mysql_query($setPass);
        
        if($qryPass) {
          echo'<p class="meldung">Yeni şifreniz başarıyla oluşturuldu.<br/><br/>Hesabınızın yeni şifresi <b>'.$acc.'</b> ist: <b>'.$newPass.'</b>.<br/><br/>Keyifli oyunlar.</p>';
        }
        else {
          echo'<p class="meldung">Yeni şifreniz oluşturulamıyor. Lütfen bir yöneticiyle görüşün.</p>';
        }
        
      }
      
    }
    else {
      echo'<p class="meldung">Herhangi bir veri girilmedi.</p>';
    }
    
  }
  
  if(isset($_POST['emailreset']) && $_POST['emailreset']=="Gonder!") {
    
    if(!empty($_POST['account']) && checkMail($_POST['email']) && $_SESSION["captcha_id"] == $_POST['captcha']) {
      
      $acc = mysql_real_escape_string($_POST['account']);
      $email = mysql_real_escape_string($_POST['email']);
      $newPass = substr(md5(rand(999,99999)),0,8);
      
      $getUser = "SELECT id FROM account.account WHERE login='".$acc."' AND email='".$email."' LIMIT 1";
      $qryUser = mysql_query($getUser);
      
      if(mysql_num_rows($qryUser)>0) {
      
        $setPass = "UPDATE account.account SET password=PASSWORD('".$newPass."') WHERE login='".$acc."' LIMIT 1";
        $qryPass = mysql_query($setPass);
        
        if($qryPass) {
          echo'<p class="meldung">Parolanız başarıyla oluşturuldu. Yeni şifrenizi içeren bir e-posta alacaksınız.</p>';
          
          $absender = $serverSettings['titel']."";
          $email = $serverSettings['pass_mail'];
          $empfaenger = $_POST['email'];
          $mail_body = "<p>Merhaba,
          Sifreniz basariyla sifirlandi.</p>
          
          <p>Hesap: ".$acc."</p>
          <p>Yeni sifreniz: ".$newPass."</p>
          
          <p>Keyifli oyunlar,</p>
          
          <p>".$serverSettings['titel']."- Oyun Takimi</p>
          
          
          <p>Bu e-posta otomatik olarak olusturuldu. Lutfen yanitlamayiniz.</p>";
          $titel = "Yeni sifreniz ";
          
          $header .= "X-Priority: 3\n";
          $header .= "X-Mailer: mtVision Homepage Mailer\n";
          $header .= "MIME-Version: 1.0\n";
          $header .= "From: ".$absender." <".$serverSettings['pass_mail'].">\n";
          $header .= "Reply-To: ".$serverSettings['pass_mail']."\n";
          //$header .= "Content-Transfer-Encoding: 8bit\n"; 
          $header .= "Content-Type: text/plain; charset=iso-8859-9\n";
          
 [COLOR="#FF0000"]        $mail = new PHPMailer();

$mail->IsSMTP();
$mail->SMTPDebug = 0; //Mesaj gönderme bşarısız olursa sayfada çıkacak hatanın detayın belirtir 2 yaparsanız tüm hataları gösterir 0 yaparsanız ekranda sadece mesaj gönderilemedi yazısı ve mailler error hatası yazar.
$mail->SMTPAuth = true;
$mail->SMTPSecure = "tls"; // send via SMTP
$mail->Host = "$incoming"; // SMTP servers
$mail->Port = 587; // turn on SMTP authentication
$mail->Username = "$mailadresi"; // SMTP username
$mail->Password = "$mailsif"; // SMTP password

$mail->From = "$mailadresi"; // smtp kullanıcı adınız ile aynı olmalı
$mail->FromName = "$absender"; // dene
$mail->AddAddress("$empfaenger","$acc");
$mail->Subject = "$titel";
$mail->MsgHTML("$mail_body");

if(!$mail->Send())
{
echo "Mesaj Gönderilemedi <p>";
echo "Mailer Error: " . $mail->ErrorInfo;
exit;
}

echo "Mesaj Gönderildi";[/COLOR]
          
        }
        else {
          echo'<p class="meldung">Yeni şifre oluşturulamıyor. Lütfen bir yöneticiyle görüşün.</p>';
        }
        
      }
      else {
        echo'<p class="meldung">Girdiğiniz bilgiler eşleşmiyor.</p>';
      }
      
    }
    else {
      echo'<p class="meldung">Tüm bilgileri doğru girmediniz.</p>';
    }
    
  }

?>

<div class="splitRight">
  <h3>Yeni Şifremi E-Posta Adresime Gönder</h3>
  <p>Bu fonksiyon, e-posta ile yeni bir şifre gönderir. Bu işlem için doğru mail adresi girmek zorundasınız.</p>
  <form action="index.php?s=lostpw" id="registerForm" method="POST">
 <div>
                            <label for="username">Hesap Adi: *</label>
                            <input
                            type="text"
                            class=""
                            id="username"
                            name="account"
                            title=""
                            value=""
                            />
          </div>
						                        <div>
                            <label for="password">E-Posta: *</label>
                            <input
                            type="text"
                            class=""
                            id="password"
                            name="email"
                            value=""
                            />
							</div>

<label for="username">G&uuml;venlik *</label>

<input type="text" name="captcha" size="10" maxlength="5"/><br/><img src="./captcha/captcha.php" alt="captcha" title="captcha"/>
      <input id="submitBtn" type="submit" name="emailreset" value="Gonder!" class="btn-big" />

  <script type="text/javascript">
							$(function() {);                        	});
                        </script>
                  </form> <p id="regLegend">* Zorunludur </p>
  </div>
            </div>
  </div></div>
        <div class="footer"></div>
		</div></div></div></div>

kırmızı ıle gozterılen yerler eklenmiş olan kodlar yardımcı olursanız sevınırım nerde yanlıs edıyorum
 

Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)

Geri
Üst