PHP sayfasından GMail SMTP sunucusunu kullanarak e-posta gönderme


389

Bir PHP sayfasından GMail'in SMTP sunucusu üzerinden bir e-posta göndermeye çalışıyorum, ancak bu hatayı alıyorum:

kimlik doğrulama hatası [SMTP: SMTP sunucusu kimlik doğrulamasını desteklemiyor (kod: 250, yanıt: mx.google.com hizmetinizde, [98.117.99.235] SIZE 35651584 8BITMIME STARTTLS ENHANCEDSTATUSCODES BORU HATTI)]

Biri yardım edebilir mi? İşte benim kod:

<?php
require_once "Mail.php";

$from = "Sandra Sender <sender@example.com>";
$to = "Ramona Recipient <ramona@microsoft.com>";
$subject = "Hi!";
$body = "Hi,\n\nHow are you?";

$host = "smtp.gmail.com";
$port = "587";
$username = "testtest@gmail.com";
$password = "testtest";

$headers = array ('From' => $from,
  'To' => $to,
  'Subject' => $subject);
$smtp = Mail::factory('smtp',
  array ('host' => $host,
    'port' => $port,
    'auth' => true,
    'username' => $username,
    'password' => $password));

$mail = $smtp->send($to, $headers, $body);

if (PEAR::isError($mail)) {
  echo("<p>" . $mail->getMessage() . "</p>");
 } else {
  echo("<p>Message successfully sent!</p>");
 }
?>

Yanıtlar:


357
// Pear Mail Library
require_once "Mail.php";

$from = '<fromaddress@gmail.com>';
$to = '<toaddress@yahoo.com>';
$subject = 'Hi!';
$body = "Hi,\n\nHow are you?";

$headers = array(
    'From' => $from,
    'To' => $to,
    'Subject' => $subject
);

$smtp = Mail::factory('smtp', array(
        'host' => 'ssl://smtp.gmail.com',
        'port' => '465',
        'auth' => true,
        'username' => 'johndoe@gmail.com',
        'password' => 'passwordxxx'
    ));

$mail = $smtp->send($to, $headers, $body);

if (PEAR::isError($mail)) {
    echo('<p>' . $mail->getMessage() . '</p>');
} else {
    echo('<p>Message successfully sent!</p>');
}

141
nedir Mail.php?? bu dosyayı nereden alabilirim?
Zain Shaikh

18
Herkes bana Mail.php dosyasını alabilirsiniz bir bağlantı verebilir misiniz. Çünkü denedim ve işe yaramaz Teşekkürler
Yoosuf

11
Yukarıdaki bu örnekteki @ sembolleri nerede? Orada tek bir tane görmüyorum!
darkAsPitch

6
Myaccount.gmail.com'un e-posta standartlarında myaccount@gmail.com ile aynı olduğuna inanıyorum.
Sherwin Flight

3
Sunucunuz belirtildiyse @ gmail eklemeniz gerekmez. Sadece myaccountkullanıcı adı yazın.
Jack

106

Swift posta gönderisini kullanarak , Gmail kimlik bilgileriyle posta göndermek oldukça kolaydır:

<?php
require_once 'swift/lib/swift_required.php';

$transport = Swift_SmtpTransport::newInstance('smtp.gmail.com', 465, "ssl")
  ->setUsername('GMAIL_USERNAME')
  ->setPassword('GMAIL_PASSWORD');

$mailer = Swift_Mailer::newInstance($transport);

$message = Swift_Message::newInstance('Test Subject')
  ->setFrom(array('abc@example.com' => 'ABC'))
  ->setTo(array('xyz@test.com'))
  ->setBody('This is a test mail.');

$result = $mailer->send($message);
?>

2
Bu, "ilkine" sadece GMAIL_USERNAME, GMAIL_PASSWORD ve Başlangıç ​​ve Bitiş adreslerini değiştirerek çalıştı. Benim için başka hiçbir çözüm işe yaramadı. Teşekkürler.
Marco Muciño

7
Katılıyorum, hızlı postacı armut ile uğraşmaktan çok daha kolay posta çözümünde bir düşüş olduğunu. PHP'nin php_openssl uzantısını etkinleştirmeyi unutmayın.
2013'te

1
SwiftMailer kullanarak güzel bir çözüm! +1
Amal Murali

1
Arrrgh. icant çalışmak için swiftmailer olsun. i bu "besteci" nasıl kullanılacağını bilmiyorum, bu yüzden ben sadece sonra github swiftmailer zip indirilen sonra open_ssl etkin sonra gmail e-posta ve şifre sağlanan ama yine de işe yaramadı.
boi_echos

3
ah aptallığım için özür dilerim. "daha az güvenli uygulamayı" etkinleştirmenizi isteyen bir e-posta olduğundan gmail hesabınızı açmanız gerekir. sonra şimdi çalışıyor heheh
boi_echos


33

Pear Mail'i tavsiye etmiyorum. 2010'dan beri güncellenmemiştir. Kaynak dosyaları da okuyun; kaynak kodu neredeyse eski, PHP 4 tarzında yazılmış ve birçok hata / hata gönderildi (Google it). Swift Mailer kullanıyorum.

Swift Mailer , PHP 5 ile yazılmış herhangi bir web uygulamasına entegre olarak e-postaları çok sayıda özelliğe göndermek için esnek ve zarif bir nesne odaklı yaklaşım sunar.

SMTP, sendmail, postfix veya kendi özel bir Taşıma uygulamasını kullanarak e-posta gönderin.

Kullanıcı adı ve şifre ve / veya şifreleme gerektiren destek sunucuları.

İstek veri içeriğini çıkarmadan başlık enjeksiyon saldırılarından koruyun.

MIME uyumlu HTML / çok parçalı e-postalar gönderin.

Kitaplığı özelleştirmek için olay güdümlü eklentiler kullanın.

Düşük bellek kullanımıyla büyük ekleri ve satır içi / gömülü görüntüleri kullanın.

Swift Mailer'ı indirip sunucunuza yükleyebileceğiniz ücretsiz ve açık bir kaynaktır . (Özellik listesi, sahibi web sitesinden kopyalanır).

Gmail SSL / SMTP ve Swift Mailer'in çalışma örneği burada ...

// Swift Mailer Library
require_once '../path/to/lib/swift_required.php';

// Mail Transport
$transport = Swift_SmtpTransport::newInstance('ssl://smtp.gmail.com', 465)
    ->setUsername('username@gmail.com') // Your Gmail Username
    ->setPassword('my_secure_gmail_password'); // Your Gmail Password

// Mailer
$mailer = Swift_Mailer::newInstance($transport);

// Create a message
$message = Swift_Message::newInstance('Wonderful Subject Here')
    ->setFrom(array('sender@example.com' => 'Sender Name')) // can be $_POST['email'] etc...
    ->setTo(array('receiver@example.com' => 'Receiver Name')) // your email / multiple supported.
    ->setBody('Here is the <strong>message</strong> itself. It can be text or <h1>HTML</h1>.', 'text/html');

// Send the message
if ($mailer->send($message)) {
    echo 'Mail sent successfully.';
} else {
    echo 'I am sure, your configuration are not correct. :(';
}

Umarım bu yardımcı olur. Mutlu kodlama ... :)


1
Bu artık çalışmıyor, her zaman "535-5.7.8 Kullanıcı adı ve Parola kabul edilmedi" dönüş iletisini alıyorum. Kimlik bilgilerim iyi ve "daha az güvenli uygulamalara izin ver" seçeneğini AÇIK olarak ayarladım. Bunu düzeltmeyi bilen var mı?
AndrewB

Swift PHP 5.x çalışmıyor gibi görünüyor - anlamıyor ?? birleşme - sadece patlar.
HerrimanCoder

28
<?php
date_default_timezone_set('America/Toronto');

require_once('class.phpmailer.php');
//include("class.smtp.php"); // optional, gets called from within class.phpmailer.php if not already loaded

$mail             = new PHPMailer();

$body             = "gdssdh";
//$body             = eregi_replace("[\]",'',$body);

$mail->IsSMTP(); // telling the class to use SMTP
//$mail->Host       = "ssl://smtp.gmail.com"; // SMTP server
$mail->SMTPDebug  = 1;                     // enables SMTP debug information (for testing)
                                           // 1 = errors and messages
                                           // 2 = messages only
$mail->SMTPAuth   = true;                  // enable SMTP authentication
$mail->SMTPSecure = "ssl";                 // sets the prefix to the servier
$mail->Host       = "smtp.gmail.com";      // sets GMAIL as the SMTP server
$mail->Port       = 465;                   // set the SMTP port for the GMAIL server
$mail->Username   = "user@gmail.com";  // GMAIL username
$mail->Password   = "password";            // GMAIL password

$mail->SetFrom('contact@prsps.in', 'PRSPS');

//$mail->AddReplyTo("user2@gmail.com', 'First Last");

$mail->Subject    = "PRSPS password";

//$mail->AltBody    = "To view the message, please use an HTML compatible email viewer!"; // optional, comment out and test

$mail->MsgHTML($body);

$address = "user2@yahoo.co.in";
$mail->AddAddress($address, "user2");

//$mail->AddAttachment("images/phpmailer.gif");      // attachment
//$mail->AddAttachment("images/phpmailer_mini.gif"); // attachment

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

?>

Ana bilgisayarı neden iki kez ayarladınız ve hangisi doğru olanı?
Emile Bergeron

Class.phpmailer.php dosyasını nereden edinebilirim? Sadece kod yapıştırmak o kadar yararlı değildir pls de kod üzerinde daha fazla açıklama içerir!
GeneCode

Bazı sözdizimi modası geçmiş olsa da, PHPMailer benim için en iyi çözüm oldu, +1
zoltar

20

SwiftMailer harici sunucuları kullanarak E-Posta gönderebilir.

Gmail sunucusunun nasıl kullanılacağını gösteren bir örnek:

require_once "lib/Swift.php";
require_once "lib/Swift/Connection/SMTP.php";

//Connect to localhost on port 25
$swift =& new Swift(new Swift_Connection_SMTP("localhost"));


//Connect to an IP address on a non-standard port
$swift =& new Swift(new Swift_Connection_SMTP("217.147.94.117", 419));


//Connect to Gmail (PHP5)
$swift = new Swift(new Swift_Connection_SMTP(
    "smtp.gmail.com", Swift_Connection_SMTP::PORT_SECURE, Swift_Connection_SMTP::ENC_TLS));

14

Soruda listelenen kodun iki değişikliğe ihtiyacı var

$host = "ssl://smtp.gmail.com";
$port = "465";

SSL bağlantısı için 465 numaralı bağlantı noktası gereklidir.


6

Kütüphane dosyalarını İNDİRMEMENİZİ Lütfen Gmail aracılığıyla PHPMailer kitaplığını kullanarak posta Gönder Github

<?php
/**
 * This example shows settings to use when sending via Google's Gmail servers.
 */
//SMTP needs accurate times, and the PHP time zone MUST be set
//This should be done in your php.ini, but this is how to do it if you don't have access to that
date_default_timezone_set('Etc/UTC');
require '../PHPMailerAutoload.php';
//Create a new PHPMailer instance
$mail = new PHPMailer;
//Tell PHPMailer to use SMTP
$mail->isSMTP();
//Enable SMTP debugging
// 0 = off (for production use)
// 1 = client messages
// 2 = client and server messages
$mail->SMTPDebug = 2;
//Ask for HTML-friendly debug output
$mail->Debugoutput = 'html';
//Set the hostname of the mail server
$mail->Host = 'smtp.gmail.com';
// use
// $mail->Host = gethostbyname('smtp.gmail.com');
// if your network does not support SMTP over IPv6
//Set the SMTP port number - 587 for authenticated TLS, a.k.a. RFC4409 SMTP submission
$mail->Port = 587;
//Set the encryption system to use - ssl (deprecated) or tls
$mail->SMTPSecure = 'tls';
//Whether to use SMTP authentication
$mail->SMTPAuth = true;
//Username to use for SMTP authentication - use full email address for gmail
$mail->Username = "username@gmail.com";
//Password to use for SMTP authentication
$mail->Password = "yourpassword";
//Set who the message is to be sent from
$mail->setFrom('from@example.com', 'First Last');
//Set an alternative reply-to address
$mail->addReplyTo('replyto@example.com', 'First Last');
//Set who the message is to be sent to
$mail->addAddress('whoto@example.com', 'John Doe');
//Set the subject line
$mail->Subject = 'PHPMailer GMail SMTP test';
//Read an HTML message body from an external file, convert referenced images to embedded,
//convert HTML into a basic plain-text alternative body
$mail->msgHTML(file_get_contents('contents.html'), dirname(__FILE__));
//Replace the plain text body with one created manually
$mail->AltBody = 'This is a plain-text message body';
//Attach an image file
$mail->addAttachment('images/phpmailer_mini.png');
//send the message, check for errors
if (!$mail->send()) {
    echo "Mailer Error: " . $mail->ErrorInfo;
} else {
    echo "Message sent!";
}


4

Gmail 465 numaralı bağlantı noktasını gerektirir ve ayrıca phpmailer kodudur :)


4

Ubuntu'ya PEAR'ın Mail.php dosyasını yüklemek için aşağıdaki komutları çalıştırın:

    sudo apt-get install php-pear
    sudo pear install mail
    sudo pear install Net_SMTP
    sudo pear install Auth_SASL
    sudo pear install mail_mime

0

"@ Gmail.com" sufix olmayan GSuite hesapları için bir çözüm var. Ayrıca @ gmail.com ile GSuite hesapları için çalışacağını düşünüyorum ama havent denedi. Öncelikle GSuite hesabınız için "allos securew daha az güvenli uygulama" seçeneğini değiştirme ayrıcalıklarına sahip olmalısınız. Ayrıcalıklara sahipseniz (hesap ayarlarını kontrol edin-> güvenlik) "iki adımlı faktör kimlik doğrulamasını" devre dışı bırakmanız gerekir, sayfanın sonuna gidin ve daha az güvenli uygulamalara izin vermek için "evet" olarak ayarlayın. Bu kadar. Bu seçenekleri değiştirme ayrıcalıklarınız yoksa, bu iş parçacığının çözümü çalışmaz. Kontrol https://support.google.com/a/answer/6260879?hl=en değişiklik yapmak için seçenek "daha az ... izin ver".


0

@Shasi kanth tarafından sunulan öneriyi denedim, ama işe yaramadı. Belgeleri okudum ve çok az değişiklik yapıldı. Bu yüzden satıcı / autoload.php, besteci ile besteci tarafından alındığı bu kodu kullanarak Gmail üzerinden posta göndermeyi başardım "swiftmailer / swiftmailer: ^ 6.0" gerektirir:

<?php
     require_once 'vendor/autoload.php';
     $transport = (new Swift_SmtpTransport('smtp.gmail.com', 465, 'ssl'))->setUsername ('SendingMail')->setPassword ('Password');

     $mailer = new Swift_Mailer($transport);

     $message = (new Swift_Message('test'))
      ->setFrom(['Sending mail'])
      ->setTo(['Recipient mail'])
      ->setBody('Message')
  ;

     $result = $mailer->send($message);
    ?>

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.