PHP posta işlevi e-postanın gönderilmesini tamamlamıyor


477
<?php
    $name = $_POST['name'];
    $email = $_POST['email'];
    $message = $_POST['message'];
    $from = 'From: yoursite.com';
    $to = 'contact@yoursite.com';
    $subject = 'Customer Inquiry';
    $body = "From: $name\n E-Mail: $email\n Message:\n $message";

    if ($_POST['submit']) {
        if (mail ($to, $subject, $body, $from)) {
            echo '<p>Your message has been sent!</p>';
        } else {
            echo '<p>Something went wrong, go back and try again!</p>';
        }
    }
?>

Basit bir posta formu oluşturmayı denedim. Formun kendisi sayfamda index.html, ancak thankyou.phpyukarıdaki PHP kodunun gömülü olduğu ayrı bir "gönderiminiz için teşekkür ederiz" sayfasına gönderilir . Kod mükemmel bir şekilde gönderilir, ancak hiçbir zaman e-posta göndermez. Bunu nasıl düzeltebilirim?


2
yerel bilgisayar veya canlı ev sahibi
Tamil Selvan C

6
1. spam'inize girmediğinden emin misiniz? 2. kutunuzda yapılandırılmış sendmail var mı?
Steven Moseley

onun canlı bir ana bilgisayar benim spam gitmiyor ... Ben değil varsayalım benim kutusu üzerinde yapılandırılmış sendmail yapılandırmakla ne demek emin değilim?
user3818620

denemeden göndermeyi dene$from
Artem Ilchenko

Yanıtlar:


512

Bu yanıtın yalnızca mail()işlevin kendisinin kullanımı için geçerli olan bölümleri olmasına rağmen , bu sorun giderme adımlarının çoğu herhangi bir PHP posta sistemine uygulanabilir.

Komut dosyanızın e-posta göndermemesinin çeşitli nedenleri vardır. Açık bir sözdizimi hatası olmadıkça bunları teşhis etmek zordur. Biri olmadan karşılaşabileceğiniz olası tuzakları bulmak için aşağıdaki kontrol listesini çalıştırmanız gerekir.

Hata raporlamanın etkinleştirildiğinden ve tüm hataları bildirecek şekilde ayarlandığından emin olun

Hata raporları, kodunuzdaki hataları ve PHP'nin karşılaştığı genel hataları ortadan kaldırmak için önemlidir. Bu hataları alabilmek için hata raporlamanın etkinleştirilmesi gerekir. Aşağıdaki kodu PHP dosyalarınızın üstüne (veya ana yapılandırma dosyasına) yerleştirmek hata raporlamayı etkinleştirir.

error_reporting(-1);
ini_set('display_errors', 'On');
set_error_handler("var_dump");

Bkz PHP yararlı hata iletileri alabilirim? - bununla ilgili daha fazla ayrıntı için bu cevap .

mail()İşlevin çağrıldığından emin olun

Aptalca görünebilir, ancak yaygın bir hata, mail()işlevi kodunuza yerleştirmeyi unutmaktır . Orada olduğundan ve yorum yapmadığından emin olun.

Emin olun mail()fonksiyonun doğru denir

bool mail (dize $ -, dize $ konu, dize $ mesajı [, dize $ Additional_headers [, dize $ Additional_parameters]])

Posta işlevi üç gerekli parametreyi ve isteğe bağlı olarak dördüncü ve beşinci parametreleri alır. İçin yaptığınız çağrıda mail()en az üç parametre yoksa, başarısız olur.

To çağrınız mail()doğru sırada doğru parametrelere sahip değilse de başarısız olur.

Sunucunun posta günlüklerini kontrol edin

Web sunucunuz, üzerinden e-posta göndermek için yapılan tüm girişimleri günlüğe kaydetmelidir. Bu günlüklerin konumu değişiklik gösterir (sunucu yöneticinize nerede bulunduğunu sormanız gerekebilir), ancak genellikle kullanıcının kök dizininde bulunabilir logs. İçeride, e-posta gönderme girişimlerinizle ilgili olarak sunucunun bildirdiği hata iletileri olacaktır.

Bağlantı noktası bağlantı hatası olup olmadığını kontrol edin

Port bloğu, çoğu geliştiricinin SMTP kullanarak e-posta teslim etmek için kodlarını entegre ederken karşılaştığı çok yaygın bir sorundur. Ve bu, sunucu posta günlüklerinde kolayca izlenebilir (posta günlüğü sunucusunun konumu, yukarıda açıklandığı gibi sunucudan sunucuya değişebilir). Paylaşılan bir barındırma sunucusundaysanız, 25 ve 587 numaralı bağlantı noktaları varsayılan olarak engellenmiş olarak kalır. Bu blok, barındırma sağlayıcınız tarafından bilerek yapılmıştır. Bu, bazı özel sunucular için bile geçerlidir. Bu bağlantı noktaları engellendiğinde, bağlantı noktası 2525'i kullanarak bağlanmayı deneyin. Bu bağlantı noktasının da engellendiğini görürseniz, tek çözüm bu bağlantı noktalarının engellemesini kaldırmak için barındırma sağlayıcınızla iletişim kurmaktır.

Barındırma sağlayıcılarının çoğu, ağlarını spam e-postaları göndermekten korumak için bu e-posta bağlantı noktalarını engeller.

Düz / TLS bağlantıları için 25 veya 587 numaralı bağlantı noktalarını ve SSL bağlantıları için 465 numaralı bağlantı noktasını kullanın. Çoğu kullanıcı için, bazı barındırma sağlayıcıları tarafından belirlenen hız sınırlarını önlemek için bağlantı noktası 587'yi kullanmanız önerilir.

Hata bastırma işlecini kullanma

Ne zaman hata bastırma operatörü @ PHP'de bir ifadesi önüne edilir, bu ifadesinin ürettiği olabilecek hata iletileri dikkate alınmaz. Bu operatörün kullanılmasının gerekli olduğu durumlar vardır, ancak posta göndermek bunlardan biri değildir .

Kodunuz içeriyorsa @mail(...), bu hata ayıklamanıza yardımcı olacak önemli hata mesajlarını gizliyor olabilirsiniz. Kaldırın @ve herhangi bir hata bildirilip bildirilmediğine bakın.

Sadece beton arızaları için hemen sonra kontrolerror_get_last() etmeniz tavsiye edilir .

mail()Dönüş değerini kontrol edin

mail()fonksiyon:

İade TRUEposta başarıyla teslim kabul edildi eğer FALSEaksi. E-postanın teslim için kabul edildiğinden, postanın gerçekte hedeflenen hedefe ulaşacağı anlamına gelmediğini not etmek önemlidir.

Bunu not etmek önemlidir, çünkü:

  • Bir FALSEdönüş değeri alırsanız, hatanın sunucunuzun postanızı kabul etmesinden kaynaklandığını bilirsiniz. Bu muhtemelen bir kodlama sorunu değil, bir sunucu yapılandırma sorunudur. Bunun neden olduğunu öğrenmek için sistem yöneticinizle konuşmanız gerekir.
  • Bir TRUEiade değeri alırsanız, bu, e-postanızın kesinlikle gönderileceği anlamına gelmez. Bu, e-postanın PHP tarafından sunucudaki ilgili işleyicisine başarıyla gönderildiği anlamına gelir. PHP'nin kontrolü dışında e-postanın gönderilmesine neden olabilecek daha fazla hata noktası var.

Yani FALSEoysa doğru yönde bir işaret yardımcı olacaktır TRUEgelmez değil mutlaka e-posta başarıyla gönderildi anlamına gelir. Bu not etmek önemlidir!

Barındırma sağlayıcınızın e-posta göndermenize izin verdiğinden ve posta göndermeyi sınırlamadığından emin olun

Birçok paylaşılan web barındırıcısı, özellikle ücretsiz web barındırma sağlayıcıları, e-postaların sunucularından gönderilmesine izin vermez veya belirli bir süre içinde gönderilebilecek miktarı sınırlandırmaz. Bunun nedeni, spam gönderenlerin daha ucuz hizmetlerinden yararlanmalarını sınırlama çabalarıdır.

Barındırıcınızın e-posta sınırlamaları olduğunu veya e-posta gönderilmesini engellediğini düşünüyorsanız, bu tür sınırlamaları listelediklerini görmek için SSS'lerini kontrol edin. Aksi takdirde, e-posta gönderme konusunda herhangi bir kısıtlama olup olmadığını doğrulamak için desteklerine ulaşmanız gerekebilir.

Spam klasörlerini kontrol edin; e-postaların spam olarak işaretlenmesini önleme

Çoğu zaman, çeşitli nedenlerle, PHP (ve diğer sunucu tarafı programlama dilleri) aracılığıyla gönderilen e-postalar, alıcının spam klasöründe bulunur. Kodunuzda sorun gidermeden önce daima orada kontrol edin.

PHP aracılığıyla gönderilen postanın bir alıcının spam klasörüne gönderilmesini önlemek için, hem PHP kodunuzda hem de e-postalarınızın spam olarak işaretlenme şansını en aza indirmek için yapabileceğiniz çeşitli şeyler vardır. Michiel de Mare'den iyi ipuçları :

  • E- postalarınızın ve alan adınızın birbirine ait olduğunu kanıtlamak ve alan adınızın taklit edilmesini önlemek için SPF ve DKIM gibi e-posta kimlik doğrulama yöntemlerini kullanın . SPF web sitesi, siteniz için DNS bilgilerini oluşturmak üzere bir sihirbaz içerir.
  • Posta sunucunuzun IP adresinin, posta göndermek için kullandığınız alan adını gösterdiğinden emin olmak için ters DNS'nizi kontrol edin .
  • Kullandığınız IP adresinin bir kara listede olmadığından emin olun
  • Yanıtlama adresinin geçerli ve varolan bir adres olduğundan emin olun.
  • Yalnızca e-posta adresini (örneğin "John Smith" <john@blacksmiths-international.com>) değil, Kime alanındaki muhatabın tam, gerçek adını kullanın .
  • Abuse@alanadiniz.com.tr ve postmaster@alanadiniz.com gibi kötüye kullanım hesaplarınızı izleyin. Bu - bu hesapların var olduğundan emin olun, kendilerine gönderilenleri okuyun ve şikayetler üzerine harekete geçin.
  • Son olarak, abonelikten çıkmayı gerçekten kolaylaştırın. Aksi takdirde, kullanıcılarınız spam düğmesine basarak aboneliğinizi iptal eder ve bu itibarınızı etkiler.

Bkz. Programlı olarak gönderdiğiniz e-postanın otomatik olarak spam olarak işaretlenmediğinden nasıl emin olabilirsiniz? bu konuyla ilgili daha fazla bilgi için.

Tüm posta başlıklarının sağlandığından emin olun

Bazı spam yazılımları, "Kimden" ve "Yanıtla" gibi ortak başlıklar eksikse postaları reddeder:

$headers = array("From: from@example.com",
    "Reply-To: replyto@example.com",
    "X-Mailer: PHP/" . PHP_VERSION
);
$headers = implode("\r\n", $headers);
mail($to, $subject, $message, $headers);

Posta başlıklarında sözdizimi hatası olmadığından emin olun

Geçersiz üstbilgiler, üstbilgileri olmaması kadar kötüdür. Yanlış bir karakter, e-postanızı raydan çıkarmak için gereken her şey olabilir. Tekrar kontrol edin PHP şekliyle sözdizimi doğru olduğundan emin olmak için değil sizin için bu hataları yakalamak.

$headers = array("From from@example.com", // missing colon
    "Reply To: replyto@example.com",      // missing hyphen
    "X-Mailer: "PHP"/" . PHP_VERSION      // bad quotes
);

Sahte From:gönderici kullanma

Postanın bir Gönderen: göndereni olsa da, yalnızca herhangi bir değer kullanamazsınız . Özellikle kullanıcı tarafından sağlanan gönderen adresleri, postaların engellenmesinin kesin bir yoludur:

$headers = array("From: $_POST[contactform_sender_email]"); // No!

Nedeni: @hotmail veya @gmail adreslerinden sorumlu olduğunu iddia etmek için web veya gönderen posta sunucunuz SPF / DKIM beyaz listeye eklenmemiş. Hatta From:yapılandırılmadığı gönderen etki alanlarına sahip postaları bile sessizce bırakabilir .

Alıcı değerinin doğru olduğundan emin olun

Bazen sorun, e-postanın alıcısı için yanlış bir değere sahip olmak kadar basittir. Bunun nedeni yanlış bir değişken kullanılması olabilir.

$to = 'user@example.com';
// other variables ....
mail($recipient, $subject, $message, $headers); // $recipient should be $to

Bunu test etmenin başka bir yolu da alıcı değerini mail()fonksiyon çağrısına kodlamaktır :

mail('user@example.com', $subject, $message, $headers); 

Bu, tüm mail()parametreler için geçerli olabilir .

Birden çok hesaba gönder

E-posta hesabı sorunlarını ortadan kaldırmak için e-postanızı farklı e-posta sağlayıcılarındaki birden çok e-posta hesabına gönderin . E-postalarınız bir kullanıcının Gmail hesabına gelmiyorsa, aynı e-postaları bir Yahoo hesabına, bir Hotmail hesabına ve normal bir POP3 hesabına (ISS tarafından sağlanan e-posta hesabınız gibi) gönderin.

E-postalar diğer e-posta hesaplarının tümüne veya bir kısmına ulaşırsa, kodunuzun e-posta gönderdiğini biliyorsunuzdur, ancak büyük olasılıkla e-posta hesabı sağlayıcısı bunları bir nedenden dolayı engelliyor olabilir. E-posta herhangi bir e-posta hesabına ulaşmazsa, sorunun kodunuzla ilgili olması daha olasıdır.

Kodun form yöntemiyle eşleştiğinden emin olun

Form yönteminizi olarak ayarladıysanız , form değerlerinizi aramak için POSTkullandığınızdan emin olun $_POST. Ayarladıysanız GETveya hiç ayarlamadıysanız $_GET, form değerlerinizi aramak için kullandığınızdan emin olun .

Form actiondeğerinizin doğru konumu gösterdiğinden emin olun

Form actionözelliğinizin PHP posta kodunuza işaret eden bir değer içerdiğinden emin olun .

<form action="send_email.php" method="POST">

Web barındırıcısının e-posta göndermeyi desteklediğinden emin olun

Bazı Web barındırma sağlayıcıları, e-postaların sunucuları üzerinden gönderilmesine izin vermez veya bunları etkinleştirmez. Bunun nedenleri değişebilir, ancak posta göndermeyi devre dışı bırakmışlarsa, bu e-postaları sizin için göndermek için üçüncü bir taraf kullanan alternatif bir yöntem kullanmanız gerekir.

Teknik desteklerine yönelik bir e-posta (çevrimiçi desteklerine veya SSS'lerine yapılan bir geziden sonra), sunucunuzda e-posta özelliklerinin olup olmadığını açıklığa kavuşturmalıdır.

localhostPosta sunucusunun yapılandırıldığından emin olun

WAMP, MAMP veya XAMPP kullanarak yerel iş istasyonunuz üzerinde geliştiriyorsanız, iş istasyonunuza bir e-posta sunucusu yüklenmemiş olabilir. Biri olmadan, PHP varsayılan olarak posta gönderemez.

Temel bir posta sunucusu yükleyerek bunun üstesinden gelebilirsiniz. Windows için ücretsiz Mercury Mail'i kullanabilirsiniz .

E-postalarınızı göndermek için SMTP'yi de kullanabilirsiniz. Bkz bu büyük cevabı dan Vikas dwivedi Bunun nasıl öğrenmek için.

PHP'nin özel özelliklerini etkinleştir mail.log

MTA ve PHP'nin günlük dosyasına ek olarak , mail()işlev için günlüğe kaydetmeyi özellikle etkinleştirebilirsiniz . Tam SMTP etkileşimini kaydetmez, en azından işlev çağrı parametrelerini ve çağırma komut dosyasını işler.

ini_set("mail.log", "/tmp/mail.log");
ini_set("mail.add_x_header", TRUE);

Ayrıntılar için http://php.net/manual/tr/mail.configuration.php adresine bakın. (Bu seçenekleri php.iniya .user.inida ya da .htaccessbelki de etkinleştirmek en iyisidir .)

Bir posta test hizmeti ile kontrol edin

MTA / web sunucusu kurulumunuzu test etmek için kullanabileceğiniz çeşitli dağıtım ve spam kontrol hizmetleri vardır. Genellikle bir posta sondası gönderirsiniz: adresleri, daha sonra bir teslim raporu ve daha sonra daha somut hatalar veya analizler alırsınız:

Farklı bir posta kullanın

PHP'nin yerleşik mail()işlevi kullanışlı ve çoğu zaman işi hallediyor ama eksiklikleri var . Neyse ki, yukarıda özetlenen sorunların birçoğunu ele almak da dahil olmak üzere daha fazla güç ve esneklik sunan alternatifler var:

Hepsi profesyonel bir SMTP sunucusu / servis sağlayıcısı ile birleştirilebilir. (E-posta kurulumu / yapılandırılabilirliği söz konusu olduğunda, tipik 08/15 paylaşılan web barındırma planları vurulur veya özlenir.)


11
İyi yazılmış, John. Sadece bir şey daha ekleyeceğim: Gönderen posta sunucusunun posta sunucusu günlüklerini kontrol etmek (ister yerel ister uzaktan barındırılıyor olsun), mümkünse, soruna neyin neden olduğuna ışık tutabilir. Bu günlükler, 1) mesajın gönderen posta sunucusu tarafından PHP betiğinden alınıp alınmadığını ve öyleyse, 2) alıcı MX sunucusunun gönderen posta sunucusundan teslim almayı kabul edip etmediğini göstermelidir.
mti2935

@ mti2935 Bu çok yardımcı oldu Bunu kaçırdığım için şaşırdım. Bunu kısaca ekleyeceğimden emin olacağım. :)
John Conde

1
i dont kullanımı ile başlar mail(), böyle kötü bir iş yapar ve diğer posta kitaplığı daha hata ayıklamak zordur

1
000webhost aynı web sitesi netai.net etki alanı üzerinde başarıyla ve hızlı e-posta gönderir ama site88.net üzerinde ben aynı web sitesi var mesaj başarıyla gönderir konsolda olsun ama herhangi bir mesaj almazsınız. Ayrıca comuf.com etki alanında hata alıyorum. (Aynı ana bilgisayarda aynı web sitesi sadece netai.net etki alanında çalışır, net16.net çok çalışır)
Nicolas

1
sorum ( stackoverflow.com/questions/44866673/… ) bunun bir kopyası olarak işaretlendi, ancak yine de anlayamıyorum. Herhangi bir öneri?
Zachary Elkins

37

Posta işlevine bir posta başlığı ekleyin:

$header = "From: noreply@example.com\r\n";
$header.= "MIME-Version: 1.0\r\n";
$header.= "Content-Type: text/html; charset=ISO-8859-1\r\n";
$header.= "X-Priority: 1\r\n";

$status = mail($to, $subject, $message, $header);

if($status)
{
    echo '<p>Your mail has been sent!</p>';
} else {
    echo '<p>Something went wrong. Please try again!</p>';
}

25
  1. Her zaman posta işlevinde başlık göndermeyi deneyin.
  2. Localhost üzerinden posta gönderiyorsanız, posta göndermek için SMTP ayarlarını yapın.
  3. Bir sunucu üzerinden posta gönderiyorsanız, sunucunuzda e-posta gönderme özelliğinin etkin olup olmadığını kontrol edin.

20

E-postanızı göndermek için bir SMTP yapılandırması kullanıyorsanız, bunun yerine PHPMailer kullanmayı deneyin . Kütüphaneyi https://github.com/PHPMailer/PHPMailer adresinden indirebilirsiniz .

E-postamı şu şekilde göndererek oluşturdum:

function send_mail($email, $recipient_name, $message='')
{
    require("phpmailer/class.phpmailer.php");

    $mail = new PHPMailer();

    $mail->CharSet = "utf-8";
    $mail->IsSMTP();                                      // Set mailer to use SMTP
    $mail->Host = "mail.example.com";  // Specify main and backup server
    $mail->SMTPAuth = true;     // Turn on SMTP authentication
    $mail->Username = "myusername";  // SMTP username
    $mail->Password = "p@ssw0rd"; // SMTP password

    $mail->From = "me@walalang.com";
    $mail->FromName = "System-Ad";
    $mail->AddAddress($email, $recipient_name);

    $mail->WordWrap = 50;                                 // Set word wrap to 50 characters
    $mail->IsHTML(true);                                  // Set email format to HTML (true) or plain text (false)

    $mail->Subject = "This is a Sampleenter code here Email";
    $mail->Body    = $message;
    $mail->AltBody = "This is the body in plain text for non-HTML mail clients";
    $mail->AddEmbeddedImage('images/logo.png', 'logo', 'logo.png');
    $mail->addAttachment('files/file.xlsx');

    if(!$mail->Send())
    {
       echo "Message could not be sent. <p>";
       echo "Mailer Error: " . $mail->ErrorInfo;
       exit;
    }

    echo "Message has been sent";
}

2
Ayrıca kullanmak zorunda kaldım: requir ("phpmailer / class.smtp.php");
Doug

15

Posta göndermeden önce bazı başlıklar eklemeniz yeterlidir:

<?php 
$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['message'];
$from = 'From: yoursite.com'; 
$to = 'contact@yoursite.com'; 
$subject = 'Customer Inquiry';
$body = "From: $name\n E-Mail: $email\n Message:\n $message";

$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html\r\n";
$headers .= 'From: from@example.com' . "\r\n" .
'Reply-To: reply@example.com' . "\r\n" .
'X-Mailer: PHP/' . phpversion();

mail($to, $subject, $message, $headers);

Ve bir şey daha. mail()Fonksiyon localhost çalışmıyor. Kodunuzu bir sunucuya yükleyin ve deneyin.


1
Bu aslında formu gönderdi yaptı - sorum şimdi olurdu ... nasıl ben başlık ile değiştirdim, kullanıcının e-postada yazılan göstermek nasıl ...
user3818620

spam klasöründeki postaları engelleyecek mi? Kod gmail'inizde kullandığınız bu yöntemi kullanarak 10'dan fazla posta gönderirsek bu postayı spam olarak göndeririz.
jewelhuq

OP'nin şu satırı vardır: $from = 'From: yoursite.com'; Tam bir geçerli e-posta adresi gibi görünmüyor, yerel bir bölüm yok. Kimden başlığını değiştirdiniz ve yeni başlıklar eklediniz. Ya da daha doğrusu $fromyukarıdaki örnekte gereksizdir. Ve yanlış biçimlendirilmiş olması muhtemelen OP'nin asıl problemiydi.
Progrock

13

Aşağıdakileri yaparak 000webhost üzerinde benim için çalıştı:

$headers  = "MIME-Version: 1.0" . "\r\n";
$headers .= "Content-type: text/html; charset=iso-8859-1" . "\r\n";
$headers .= "From: ". $from. "\r\n";
$headers .= "Reply-To: ". $from. "\r\n";
$headers .= "X-Mailer: PHP/" . phpversion();
$headers .= "X-Priority: 1" . "\r\n";

E-postayı gönderirken doğrudan e-posta adresini girin:

mail('email@gmail.com', $subject, $message, $headers)

Kullanın ''ve kullanmayın "".

Bu kod çalışıyor, ancak e-posta yarım saat gecikmeyle alındı.


10

Çoğunlukla mail()işlev paylaşılan barındırmada devre dışı bırakılır. Daha iyi bir seçenek SMTP kullanmaktır. En iyi seçenek Gmail veya SendGrid olacaktır.


SMTPconfig.php

<?php 
    $SmtpServer="smtp.*.*";
    $SmtpPort="2525"; //default
    $SmtpUser="***";
    $SmtpPass="***";
?>

SMTPmail.php

<?php
class SMTPClient
{

    function SMTPClient ($SmtpServer, $SmtpPort, $SmtpUser, $SmtpPass, $from, $to, $subject, $body)
    {

        $this->SmtpServer = $SmtpServer;
        $this->SmtpUser = base64_encode ($SmtpUser);
        $this->SmtpPass = base64_encode ($SmtpPass);
        $this->from = $from;
        $this->to = $to;
        $this->subject = $subject;
        $this->body = $body;

        if ($SmtpPort == "") 
        {
            $this->PortSMTP = 25;
        }
        else
        {
            $this->PortSMTP = $SmtpPort;
        }
    }

    function SendMail ()
    {
        $newLine = "\r\n";
        $headers = "MIME-Version: 1.0" . $newLine;  
        $headers .= "Content-type: text/html; charset=iso-8859-1" . $newLine;  

        if ($SMTPIN = fsockopen ($this->SmtpServer, $this->PortSMTP)) 
        {
            fputs ($SMTPIN, "EHLO ".$HTTP_HOST."\r\n"); 
            $talk["hello"] = fgets ( $SMTPIN, 1024 ); 
            fputs($SMTPIN, "auth login\r\n");
            $talk["res"]=fgets($SMTPIN,1024);
            fputs($SMTPIN, $this->SmtpUser."\r\n");
            $talk["user"]=fgets($SMTPIN,1024);
            fputs($SMTPIN, $this->SmtpPass."\r\n");
            $talk["pass"]=fgets($SMTPIN,256);
            fputs ($SMTPIN, "MAIL FROM: <".$this->from.">\r\n"); 
            $talk["From"] = fgets ( $SMTPIN, 1024 ); 
            fputs ($SMTPIN, "RCPT TO: <".$this->to.">\r\n"); 
            $talk["To"] = fgets ($SMTPIN, 1024); 
            fputs($SMTPIN, "DATA\r\n");
            $talk["data"]=fgets( $SMTPIN,1024 );
            fputs($SMTPIN, "To: <".$this->to.">\r\nFrom: <".$this->from.">\r\n".$headers."\n\nSubject:".$this->subject."\r\n\r\n\r\n".$this->body."\r\n.\r\n");
            $talk["send"]=fgets($SMTPIN,256);
            //CLOSE CONNECTION AND EXIT ... 
            fputs ($SMTPIN, "QUIT\r\n"); 
            fclose($SMTPIN); 
            // 
        } 
        return $talk;
    } 
}
?>

contact_email.php

<?php 
include('SMTPconfig.php');
include('SMTPmail.php');
if($_SERVER["REQUEST_METHOD"] == "POST")
{
    $to = "";
    $from = $_POST['email'];
    $subject = "Enquiry";
    $body = $_POST['name'].'</br>'.$_POST['companyName'].'</br>'.$_POST['tel'].'</br>'.'<hr />'.$_POST['message'];
    $SMTPMail = new SMTPClient ($SmtpServer, $SmtpPort, $SmtpUser, $SmtpPass, $from, $to, $subject, $body);
    $SMTPChat = $SMTPMail->SendMail();
}
?>

Smtp kullanıcı ve parolasını sunucuda düz metin olarak kaydetmek iyi bir fikir mi?
Juri

@Juri muhtemelen değil ... Tanrı ben posta işlevini çalışmak için nasıl

9

Yalnızca mail()işlevi kullanıyorsanız , yapılandırma dosyasını tamamlamanız gerekir.

Posta genişletmeyi açmanız ve SMTP smtp_portkullanıcı adınızı ve şifrenizi vb. Ve en önemlisi ayarlamanız gerekir. Bu olmadan, posta gönderilemez. Ayrıca, PHPMailgöndermek için sınıfı kullanabilirsiniz .


9

Bu iki şeyi ayrı ayrı ve birlikte deneyin:

  1. kaldır if($_POST['submit']){}
  2. kaldır $from(sadece bağırsağım)

8

Bunun hile yapması gerektiğini düşünüyorum. Ben sadece bir if(issetHTML ekledim ve PHP HTML'den ayırmak için vücut değişkenleri birleştirme ekledi.

<?php
    $name = $_POST['name'];
    $email = $_POST['email'];
    $message = $_POST['message'];
    $from = 'From: yoursite.com'; 
    $to = 'contact@yoursite.com'; 
    $subject = 'Customer Inquiry';
    $body = "From:" .$name."\r\n E-Mail:" .$email."\r\n Message:\r\n" .$message;

if (isset($_POST['submit'])) 
{
    if (mail ($to, $subject, $body, $from)) 
    { 
        echo '<p>Your message has been sent!</p>';
    } 
    else 
    { 
        echo '<p>Something went wrong, go back and try again!</p>'; 
    }
}

?>

8

İleriye giden bulan herkes için, ben kullanmanızı tavsiye etmem mail. Bununla ilgili bazı cevaplar var, ama bunun nedeni değil.

PHP'nin mailişlevi sadece opak değildir , işi yapmak için kullandığınız MTA'ya (yani Sendmail ) tamamen güvenir . mailolacak sadece MTA bunu kabul etmemesi halinde size (göndermeye çalıştığınız zaman yani Sendmail aşağı idi). E-postanın başarılı olup olmadığını size söyleyemez çünkü teslim edildi. Bu şekilde ( John Conde'un cevap ayrıntıları olarak), şimdi MTA'nın günlükleriyle uğraşacaksınız ve size bunu düzeltememe konusunda yeterince bilgi vereceğini umuyorsunuz. Paylaşılan bir ana bilgisayardaysanız veya MTA günlüklerine erişiminiz yoksa, şansınız kalmaz. Ne yazık ki, Linux için çoğu vanilya yüklemesi için varsayılan bu şekilde halleder.

Bir posta kitaplığı ( PHPMailer , Zend Framework 2+, vb.), Çok farklı bir şey yapar mail. Bir soketi doğrudan alıcı posta sunucusuna açarlar ve daha sonra SMTP posta komutlarını doğrudan bu soket üzerinden gönderirler. Başka bir deyişle, sınıf kendi MTA işlevi görür (kütüphanelere maileninde sonunda postayı göndermek için kullanmasını söyleyebilirsiniz , ancak bunu yapmamanızı şiddetle tavsiye ederim).

Bu, alıcı sunucudan gelen yanıtları doğrudan görebileceğiniz anlamına gelir (örneğin, PHPMailer'da hata ayıklama çıktısını açabilirsiniz ). Artık bir postanın gönderilemediğini veya nedenini tahmin etmeye gerek yok.

SMTP kullanıyorsanız (yani, arama yapıyorsanız isSMTP()), SMTPDebugözelliği kullanarak SMTP görüşmesinin ayrıntılı bir konuşma metnini alabilirsiniz .

Senaryonuza böyle bir satır ekleyerek bu seçeneği belirleyin:

$mail->SMTPDebug = 2;

Ayrıca daha iyi bir arayüzden faydalanırsınız. İle mailbir kütüphanede vb ile tüm başlıklarını, ekleri kurmak zorunda, bunu yapmak için özel bir işlevi vardır. Ayrıca, işlevin tüm zor parçaları (başlıklar gibi) yaptığı anlamına gelir.


6
$name = $_POST['name'];
$email = $_POST['email'];
$reciver = '/* Reciver Email address */';
if (filter_var($reciver, FILTER_VALIDATE_EMAIL)) {
    $subject = $name;
    // To send HTML mail, the Content-type header must be set.
    $headers = 'MIME-Version: 1.0' . "\r\n";
    $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
    $headers .= 'From:' . $email. "\r\n"; // Sender's Email
    //$headers .= 'Cc:' . $email. "\r\n"; // Carbon copy to Sender
    $template = '<div style="padding:50px; color:white;">Hello ,<br/>'
        . '<br/><br/>'
        . 'Name:' .$name.'<br/>'
        . 'Email:' .$email.'<br/>'
        . '<br/>'
        . '</div>';
    $sendmessage = "<div style=\"background-color:#7E7E7E; color:white;\">" . $template . "</div>";
    // Message lines should not exceed 70 characters (PHP rule), so wrap it.
    $sendmessage = wordwrap($sendmessage, 70);
    // Send mail by PHP Mail Function.
    mail($reciver, $subject, $sendmessage, $headers);
    echo "Your Query has been received, We will contact you soon.";
} else {
    echo "<span>* invalid email *</span>";
}

6

CodeIgniter tarafından yapılan yapılandırma e-postasını kullanabilirsiniz . Örneğin, SMTP kullanma (basit yol):

$config = Array(
        'protocol' => 'smtp',
        'smtp_host' => 'mail.domain.com', // Your SMTP host
        'smtp_port' => 26, // Default port for SMTP
        'smtp_user' => 'name@domain.com',
        'smtp_pass' => 'password',
        'mailtype' => 'html',
        'charset' => 'iso-8859-1',
        'wordwrap' => TRUE
);
$message = 'Your msg';
$this->load->library('email', $config);
$this->email->from('name@domain.com', 'Title');
$this->email->to('emaildestination@domain.com');
$this->email->subject('Header');
$this->email->message($message);

if($this->email->send()) 
{
   // Conditional true
}

Benim için çalışıyor!


1
fsockopen () [function.fsockopen]: php_network_getaddresses: getaddrinfo başarısız oldu: Böyle bir ana bilgisayar bilinmiyor. - Bu hatayla karşılaşırsam, nedeni nedir ve ne yapılması gerekir?
Choudhury Saadmaan Mahmid

1
"Benim için çalışıyor" sadece anekdot bir bilgi, ama çok fazla açıklama gerçekten değil. Bağlantı noktası ve smtp şifresi çoğu kullanıcı için yanıltıcı olacaktır.
mario

Nedir "yapılandırma e-posta" ? Referansınız var mı?
Peter Mortensen

4

Bunu dene

if ($_POST['submit']) {
    $success= mail($to, $subject, $body, $from);
    if($success)
    { 
        echo '
        <p>Your message has been sent!</p>
        ';
    } else { 
        echo '
        <p>Something went wrong, go back and try again!</p>
        '; 
    }
}

4

Belki de sorun posta sunucusunun yapılandırılmasıdır. Bu tür sorunları önlemek veya posta sunucusu sorunu hakkında endişelenmenize gerek yok, PHPMailer kullanmanızı öneririz .

Posta göndermek için gereken her şeye sahip bir eklentidir ve dikkate almanız gereken tek şey SMTP bağlantı noktasının (Port: 25 ve 465) etkinleştirilmesidir.

require_once 'PHPMailer/PHPMailer.php';
require_once '/servicios/PHPMailer/SMTP.php';
require_once '/servicios/PHPMailer/Exception.php';

$mail = new \PHPMailer\PHPMailer\PHPMailer(true);
try {
    //Server settings
    $mail->SMTPDebug = 0;
    $mail->isSMTP();
    $mail->Host = 'smtp.gmail.com';
    $mail->SMTPAuth = true;
    $mail->Username = 'correo@gmail.com';
    $mail->Password = 'contrasenia';
    $mail->SMTPSecure = 'ssl';
    $mail->Port = 465;

    // Recipients
    $mail->setFrom('correo@gmail.com', 'my name');
    $mail->addAddress('destination@correo.com');

    // Attachments
    $mail->addAttachment('optional file');         // Add files, is optional

    // Content
    $mail->isHTML(true);// Set email format to HTML
    $mail->Subject = utf8_decode("subject");
    $mail->Body    = utf8_decode("mail content");
    $mail->AltBody = '';
    $mail->send();
}
catch (Exception $e) {
    $error = $mail->ErrorInfo;
}

1
IANA, 465 numaralı bağlantı noktasını 587 numaralı bağlantı noktasıyla değiştirmiştir. Bu, varsayılan posta gönderme bağlantı noktasıdır. Bir e-posta istemcisi veya giden sunucu, uygun bir posta sunucusu tarafından yönlendirilmek üzere bir e-posta gönderdiğinde, her zaman varsayılan bağlantı noktası olarak SMTP 587 bağlantı noktasını kullanmalıdır. Bkz. Mailgun.com/blog/which-smtp-port-understanding-ports-25-465-587 . Akıllıca bir tavsiye: Ne yaptığınızın tam olarak farkında değilseniz bilgisayarınızdaki bağlantı noktalarını açmayın!
Harm

3

Sunucunuzda Sendmail yüklü olduğundan emin olun.

Kodunuzu kontrol ettiyseniz ve orada yanlış bir şey olmadığını doğruladıysanız, / var / mail adresine gidin ve bu klasörün boş olup olmadığını kontrol edin.

Boşsa, aşağıdakileri yapmanız gerekir:

sudo apt-get install sendmail

bir Ubuntu sunucusundaysanız.


Yararlı olamayacak kadar kaba. Sadece bir MTA kurmak nadiren buna izin verecektir. Ve tam bir sendmail / postfix / qmail kurulum kılavuzu konu dışı olacaktır.
mario

Bu yorum cevabımla ilgili mi? Çünkü bu benim başıma gelmedi ve ben de aynı şekilde çözmedim. Sorunun çeşitli olası cevapları var, geçmişte yukarıdakilerin hepsini denedikten sonra benimkilerden biri, cevabım benim için sorunu çözmüştü, bu yüzden burada başka bir potansiyel çözüm olarak sundum.
Daniel

Evet elbette. Olası birçok cevaptan biri. Bununla birlikte, hala yüzeysel IMO'ya giden yol. Bunu "MTA'ya ihtiyacınız var" şeklinde genelleştirmek gibi… - ve burada birkaç kurulum kılavuzu bağlantılı… ancak daha pratik olabilir.
mario

3

Her şeyden önce, mail () işlevi için çok fazla parametreniz olabilir ... En fazla beş, mail(to, subject, message, headers, parameters);

Bildiğim kadarıyla $fromsizin Linux kullanıyorsanız değişken gider, otomatik olarak Hostunuz gelmelidir cPanel . Otomatik olarak cPanel kullanıcı adınızdan ve IP adresinizden gelir.

$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['message'];
$from = 'From: yoursite.com';
$to = 'contact@yoursite.com';
$subject = 'Customer Inquiry';
$body = "From: $name\n E-Mail: $email\n Message:\n $message";

Ayrıca mail () işlevinizde doğru değişken sırasına sahip olduğunuzdan emin olun.

Bu mail($to, $subject, $message, etc.)düzende, yoksa çalışma şansı yoktur.


3

PHP ile posta gönderme konusunda sorun yaşıyorsanız, PHPMailer veya SwiftMailer gibi bir alternatif düşünün .

PHP ile posta göndermem gerektiğinde genellikle SwiftMailer kullanıyorum.


Temel kullanım:

require 'mail/swift_required.php';

$message = Swift_Message::newInstance()
    // The subject of your email
    ->setSubject('Jane Doe sends you a message')
    // The from address(es)
    ->setFrom(array('jane.doe@gmail.com' => 'Jane Doe'))
    // The to address(es)
    ->setTo(array('frank.stevens@gmail.com' => 'Frank Stevens'))
    // Here, you put the content of your email
    ->setBody('<h3>New message</h3><p>Here goes the rest of my message</p>', 'text/html');

if (Swift_Mailer::newInstance(Swift_MailTransport::newInstance())->send($message)) {
    echo json_encode([
        "status" => "OK",
        "message" => 'Your message has been sent!'
    ], JSON_PRETTY_PRINT);
} else {
    echo json_encode([
        "status" => "error",
        "message" => 'Oops! Something went wrong!'
    ], JSON_PRETTY_PRINT);
}

SwiftMailer'ı kullanma hakkında daha fazla bilgi için resmi belgelere bakın .


3

Harici postalar kullanmak istemeyen ve özel bir Linux sunucusunda posta göndermek () isteyenler için.

PHP'nin posta gönderme şekli, php.inibölümünde açıklanmaktadır [mail function].

Parametre sendmail-path, sendmail'in nasıl çağrıldığını açıklar. Varsayılan değer sendmail -t -i, bu yüzden sendmail -t -i < message.txtLinux konsolunda bir çalışma alırsanız - işiniz bitti. Ayrıca mail.loghata ayıklamaya ekleyebilir ve mail () işlevinin gerçekten çağrıldığından emin olabilirsiniz.

Farklı MTA'lar uygulayabilir sendmail. Sadece bu isimdeki ikili dosyalarına sembolik bir bağ kurarlar. Örneğin, Debian'da varsayılan Postfix'tir . MTA'nızı posta göndermek ve konsoldan test etmek için yapılandırın sendmail -v -t -i < message.txt. Dosya message.txtbir iletinin tüm üstbilgilerini içermelidir ve bir gövde, zarfın hedef adresi To:üstbilgiden alınır . Misal:

From: myapp@example.com
To: mymail@example.com
Subject: Test mail via sendmail.

Text body.

MTM olarak ssmtp kullanmayı tercih ediyorum, çünkü basit ve açık portlarla bir daemon çalıştırmayı gerektirmiyor. ssmtp yalnızca localhost'tan posta göndermek için uygundur . Ayrıca, herkese açık bir posta hizmetinde hesabınız aracılığıyla kimliği doğrulanmış e-posta gönderebilir. Ssmtp'yi yükleyin ve yapılandırma dosyasını düzenleyin /etc/ssmtp/ssmtp.conf. Ayrıca Unix hesaplarına yerel sistem postası alabilmek (örneğin, cron işlerinden gelen kök uyarılar) yapılandırma /etc/ssmtp/revaliasesdosyasını.

İşte Yandex postadaki hesabım için yapılandırmam:

root=mymail@example.com
mailhub=smtp.yandex.ru:465
FromLineOverride=YES
UseTLS=YES
AuthUser=abcde@yandex.ru
AuthPass=password

2

Bu sadece küçük bir avuç kullanıcıyı etkileyecek, ancak bu küçük avuç için belgelenmesini istiyorum. Bu küçük avuç üyesi bu sorun nedeniyle çalışan bir PHP posta komut dosyası 6 saat sorun giderme harcadı.

Www.AceITLab.com'dan XAMPP çalıştıran bir üniversiteye gidiyorsanız, profesörümüzün bize ne söylemediğini bilmelisiniz: AceITLab güvenlik duvarı (Windows güvenlik duvarı değil) XAMPP'deki MercuryMail'i engelliyor. Alternatif bir posta istemcisi kullanmanız gerekecek, armut bizim için çalışıyor. Düşük güvenlik ayarlarına sahip bir Gmail hesabına göndermeniz gerekir.

Evet, biliyorum, bu gerçek dünya e-postası için tamamen işe yaramaz. Ancak, gördüğüm kadarıyla, akademik ortamların ve gerçek dünyanın genellikle çok az ortak noktası vardır.


Bu çok garip bir şekilde spesifik ve gerçekten kimseye yardımcı olmayacak. Cevabınızın altındaki [sil] bağlantısını kullanın lütfen.
mario

Bu bağlamda "armut" nedir? PHP yazılım deposu PEAR mı demek istediniz ? Veya başka bir şey? Örneğin akran ?
Peter Mortensen

Gerçekten "kıymetli küçük" mü demek istiyorsun ? İstenecek bir şey mi? Neden?
Peter Mortensen

1

Bu kodu yerel bir sunucuda (yani geliştirme amaçlı olarak bilgisayarınız) çalıştırıyorsanız, e-postayı alıcıya göndermez. .txtAdlı bir klasörde bir dosya oluşturur mailoutput.

000webhostVeya gibi ücretsiz bir hosing hizmeti kullanıyorsanız hostinger, bu servis sağlayıcıları mail()e-posta sahteciliği, spam, vb .'nin istenmeyen kullanımını önlemek için işlevi devre dışı bırakır .

Servis sağlayıcının mail () işlevini desteklediğinden eminseniz, daha fazla başvuru için bu PHP kılavuzunu kontrol edebilirsiniz,

PHP postası ()

Barındırma hizmetinizin hava durumu (mail) işlevini desteklediğini kontrol etmek için bu kodu çalıştırmayı deneyin (alıcının e-posta adresini değiştirmeyi unutmayın) :

<?php
    $to      = 'nobody@example.com';
    $subject = 'the subject';
    $message = 'hello';
    $headers = 'From: webmaster@example.com' . "\r\n" .
        'Reply-To: webmaster@example.com' . "\r\n" .
        'X-Mailer: PHP/' . phpversion();

    mail($to, $subject, $message, $headers);
?>

1

Debian 10.0.0 ('Buster') için Sendmail kurulumu aslında önemsizdi!

php.ini

[mail function]
sendmail_path=/usr/sbin/sendmail -t -i
; (Other directives are mostly windows)

Standart sendmail paket kurulumu (' gönder'e izin verir):

su -                                        # Install as user 'root'
dpkg --list                                 # Is install necessary?
apt-get install sendmail sendmail-cf m4     # Note multiple package selection
sendmailconfig                              # Respond all 'Y' for new install

Çeşitli yararlı komutlar:

which sendmail                              # /usr/sbin/sendmail
which sendmailconfig                        # /usr/sbin/sendmailconfig
man sendmail                                # Documentation
systemctl restart sendmail                  # As and when required

Doğrulama (gönderme yeteneği)

echo "Subject: sendmail test" | sendmail -v <yourEmail>@gmail.com

Yukarıdakiler yaklaşık 5 dakika sürdü. Sonra 5 saat harcadım ... Spam klasörünüzü kontrol etmeyi unutmayın !


0

Birkaç olasılık vardır:

  1. Bir sunucu sorunuyla karşı karşıyasınız. Sunucunun posta sunucusu yok. Bu nedenle, postanız çalışmıyor, çünkü kodunuz iyi ve posta türüyle çalışıyor.

  2. Gönderilen değeri alamıyorsunuz. Kodunuzu statik bir değerle deneyin.

  3. Posta göndermek için SMTP postalarını kullanma ...


0

Libmail'i kullanabilirsiniz: http://lwest.free.fr/doc/php/lib/index.php3?page=mail&lang=tr

include "libmail.php";
$m = new Mail(); // Create the mail
$m->From($_POST['form']);
$m->To($_POST['to']);
$m->Subject($_POST['subject']);
$m->Body($_POST['body']);
$m->Cc($_POST['cc']);
$m->Priority(4);
// Attach a file of type 'image/gif' to be displayed in the message if possible
$m->Attach("/home/leo/toto.gif", "image/gif", "inline");
$m->Send(); // Send the mail
echo "Mail was sent:"
echo $m->Get(); // Show the mail source

5
Bahsetmek önemlidir: bu sadece bir mail()işlev sarıcıdır. Yalnızca mesaj oluşturma ve bazı hile ekler.
mario

0

Hatalarınızı şu yollarla görebilirsiniz:

error_reporting(E_ALL);

Ve örnek kodum:

<?php
    use PHPMailer\PHPMailer\PHPMailer;
    require 'PHPMailer.php';
    require 'SMTP.php';
    require 'Exception.php';

    $name = $_POST['name'];
    $mailid = $_POST['mail'];
    $mail = new PHPMailer;
    $mail->IsSMTP();
    $mail->SMTPDebug = 0;                   // Set mailer to use SMTP
    $mail->Host = 'smtp.gmail.com';         // Specify main and backup server
    $mail->Port = 587;                      // Set the SMTP port
    $mail->SMTPAuth = true;                 // Enable SMTP authentication
    $mail->Username = 'someone@gmail.com';  // SMTP username
    $mail->Password = 'password';           // SMTP password
    $mail->SMTPSecure = 'tls';              // Enable encryption, 'ssl' also accepted

    $mail->From = 'someone@gmail.com';
    $mail->FromName = 'name';
    $mail->AddAddress($mailid, $name);       // Name is optional
    $mail->IsHTML(true);                     // Set email format to HTML
    $mail->Subject = 'Here is the subject';
    $mail->Body    = 'Here is your message' ;
    $mail->AltBody = 'This is the body in plain text for non-HTML mail clients';
    if (!$mail->Send()) {
       echo 'Message could not be sent.';
       echo 'Mailer Error: ' . $mail->ErrorInfo;
       exit;
    }
    echo 'Message has been sent';
?>

1
SMTPDebug = 0yararlı değil. GMail ile de basit bir "şifre" işe yaramaz. Bu cevap burada çok fazla katkıda bulunmuyor.
mario

-2

Sendmail sisteminizin çalışması koşuluyla, kodunuzun aşağıdaki gibi değiştirilmesi gerekir:

<?php
    $name = $_POST['name'];
    $email = $_POST['email'];
    $message = $_POST['message'];

    $header ="
Content-Type: text/html; charset=UTF-8\r\n
MIME-Version: 1.0\r\n
From: \"$name\" <$email>\r\n
Reply-To: no-reply@yoursite.com\r\n
X-Mailer: yoursite.com mailer\r\n
";

    $to = '"Contact" <contact@yoursite.com>'; 
    $subject = 'Customer Inquiry';
    $body =<<<EOB
<!DOCTYPE html>
<html>
    <body>
        $message
    </body>
</html>
EOB;

    if ($_POST['submit']) {
        if (mail ($to, $subject, $body, $header) !== false) { 
            echo '<p>Your message has been sent!</p>';
        } else { 
            echo '<p>Something went wrong, go back and try again!</p>'; 
        }
    }
?>

Bu, HTML tabanlı e-postalar göndermenizi sağlar.

Önemli bir ilgi alanı:

  1. bir başlık çok satırlı dize oluşturduk (her satır \ r \ n ile ayrılmış);
  2. daha iyi e-postalar oluşturabilmeniz için HTML döndürdüğümüzü ifade etmek üzere İçerik türü ekledik (iletinize HTML sayfasında yaptığınız gibi CSS dahil olmak üzere istediğiniz HTML kodunu ekleyebilirsiniz).

Not: <<<EOBsözdizimi, son EOB işaretleyicisinin satırın başlangıcı olarak başlamasını ve noktalı virgülden sonra boşluk veya herhangi bir karakter içermemesini gerektirir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.