Bir SMTP sunucusundan PHP kullanarak e-posta gönderme

 $from = "someonelse@example.com"; $headers = "From:" . $from; echo mail ("borutflis1@gmail.com" ,"testmailfunction" , "Oj",$headers); 

PHP'de e-posta gönderirken sorun yaşıyorum. Hata mesajını alıyorum: SMTP server response: 530 SMTP authentication is required .

Doğrulama için SMTP olmadan e-posta gönderebileceğiniz izlenimini edindim. Bu gönderinin filtreleneceğini biliyorum, ancak şu anda önemli değil.

 [mail function] ; For Win32 only. ; http://php.net/smtp SMTP = localhost ; http://php.net/smtp-port smtp_port = 25 ; For Win32 only. ; http://php.net/sendmail-from sendmail_from = someonelse@example.com 

Bu php.ini ayardır. SMTP nasıl yapılandırılır? Doğrulama gerektirmeyen SMTP sunucuları var mı, yoksa sunucuyu kendim mi yapılandırmalıyım?

101
22 янв. Borut Flis tarafından 22 Oca tarihinde kuruldu. 2013-01-22 13:42 13, 13: 42'de 2013-01-22 13:42
@ 6 cevaplar

SMTP Yetkilendirme gerektiren bir sunucu üzerinden bir e-posta gönderdiğinizde, gerçekten belirtmeniz ve ana bilgisayarı, kullanıcı adını ve şifreyi ayarlamanız gerekir (ve standart değilse, muhtemelen bağlantı noktası - 25).

Örneğin, genellikle PHPMailer'i aynı ayarlarla kullanıyorum:

 $mail = new PHPMailer(); $mail->IsSMTP(); $mail->CharSet = 'UTF-8'; $mail->Host = "mail.example.com"; // SMTP server example $mail->SMTPDebug = 0; // enables SMTP debug information (for testing) $mail->SMTPAuth = true; // enable SMTP authentication $mail->Port = 25; // set the SMTP port for the GMAIL server $mail->Username = "username"; // SMTP account username example $mail->Password = "password"; // SMTP account password example 

PHPMailer hakkında daha fazla bilgiyi burada bulabilirsiniz: https://github.com/PHPMailer/PHPMailer

140
22 янв. Yanıt Ivo Pereira Oca 22 2013-01-22 13:46 '13 13:46 2013-01-22 13:46
 <?php ini_set("SMTP", "aspmx.l.google.com"); ini_set("sendmail_from", "YOURMAIL@gmail.com"); $message = "The mail message was sent with the following mail setting:\r\nSMTP = aspmx.l.google.com\r\nsmtp_port = 25\r\nsendmail_from = YourMail@address.com"; $headers = "From: YOURMAIL@gmail.com"; mail("Sending@provider.com", "Testing", $message, $headers); echo "Check your email now....<BR/>"; ?> 

YA

border=0

DAHA FAZLASI

37
22 янв. Cevap 22 Ocak'ta Dipesh Parmar tarafından verildi . 2013-01-22 14:21 13, 02:21 de 2013-01-22 14:21

Unix kullanıcıları için, mail () aslında e-posta göndermek için Sendmail komutunu kullanır. Uygulamayı değiştirmek yerine çevreyi değiştirebilirsiniz. msmtp Sendmail uyumlu CLI sözdizimine sahip bir SMTP istemcisidir, yani Sendmail yerine kullanılabilir. Bu sadece php.ini'nizde küçük bir değişiklik gerektiriyor.

 sendmail_path = "/usr/bin/msmtp -C /path/to/your/config -t" 

Daha sonra lowmail () işlevi bile SMTP desteğiyle çalışabilir. Uygulamayı değiştirmeden varolan bir uygulamayı sendgrid veya mandrill gibi posta hizmetlerine bağlamaya çalışıyorsanız, bu çok kullanışlıdır.

37
03 дек. Cevap txyoji 03 dec verildi . 2013-12-03 00:52 '13, 0:52 2013-12-03 00:52

PHP PEAR ile bunun nasıl yapılacağı

 // Pear Mail Library require_once "Mail.php"; $from = '<your@mail.com>'; //change this to your email address $to = '<someone@mail.com>'; // change to address $subject = 'Insert subject here'; // subject of mail $body = "Hello world! this is the content of the email"; //content of mail $headers = array( 'From' => $from, 'To' => $to, 'Subject' => $subject ); $smtp = Mail::factory('smtp', array( 'host' => 'ssl://smtp.gmail.com', 'port' => '465', 'auth' => true, 'username' => 'your@gmail.com', //your gmail account 'password' => 'snip' // your password )); // Send the mail $mail = $smtp->send($to, $headers, $body); 

Gmail smtp kullanıyorsanız, ayarlarında Gmail hesabınızda SMTP’yi etkinleştirmeyi unutmayın

14
03 нояб. Cevap Bolli 03 Kasım'da verilir. 2015-11-03 21:43 '15 21:43 2015-11-03 21:43

Sorun PHP mail() işlevinin çok sınırlı işlevselliğe sahip olmasıdır. PHP ile posta göndermenin birkaç yolu vardır.

  • mail() , sisteminizde bir SMTP sunucusu kullanır. Windows'ta en az iki sunucu kullanabilirsiniz: hMailServer ve xmail . Birkaç saat ayarlayıp onları almaya harcadım. Bence birincisi daha basit. Şimdi hMailServer, Windows 7 x64 ile çalışır.
  • mail() , Linux uzak veya sanal bir makinede bir SMTP sunucusu kullanır. Elbette, Gmail gibi gerçek bir posta servisi, herhangi bir kimlik bilgisi veya anahtar olmadan doğrudan bağlantıya izin vermez. Sanal bir makineyi yapılandırabilir veya yerel bir ağda kullanabilirsiniz. Çoğu Linux dağıtımının kutudan çıkan bir posta sunucusu vardır. Özelleştir ve eğlen. Exim4'ü varsayılan olarak LAN arayüzünde dinleyen Debian 7'de kullanıyorum.
  • Posta kütüphaneleri doğrudan bağlantılar kullanır. Lib'lerin yapılandırılması daha kolaydır. SwiftMailer'i kullandım ve mükemmel bir şekilde Gmail hesabınızdan postalar gönderiyor. PHPMailer'in de iyi olduğunu düşünüyorum.

Seçiminizden bağımsız olarak, bir miktar soyutlama kullanmanızı tavsiye ederim. PHP kütüphanesini, Windows çalıştıran geliştirme makinenizde ve Linux üretim makinesinde sadece mail() . Soyutlama katmanı, uygulamanızın üzerinde çalıştığı sisteme bağlı olarak posta sürücüleri değiş tokuş yapmanıza izin verir. Soyut bir sınıf MyMailer veya bir soyut send() yöntemiyle bir arayüz oluşturun. İki sınıf MyPhpMailer ve MySwiftMailer . send() yöntemini uygun şekilde uygulayın.

12
22 янв. Cevap George Sovetov 22 Ocak tarafından verildi 2014-01-22 23:44 '14 23:44 2014-01-22 23:44

Kimlik doğrulaması olmadan çalışan birkaç SMTP sunucusu var, ancak sunucu kimlik doğrulaması gerektiriyorsa, bunun yolu yoktur.

PHP postasının yerleşik işlevleri çok sınırlıdır - bir SMTP sunucusu yalnızca Windows'ta belirtilebilir. Açık * nix, mail() işletim sistemi ikili dosyalarını kullanır.

Ağdaki herhangi bir SMTP sunucusuna E-Posta göndermek istiyorsanız, SwiftMailer gibi bir kütüphane kullanmayı düşünün. Bu, örneğin giden Google Mail sunucularını kullanmanıza izin verecektir.

10
22 янв. Cevap Pekka 웃 22 jan. 2013-01-22 13:44 13, 13: 44'te , 2013-01-22 13:44

tags ile ilgili diğer sorular veya bir soru sorun