it-swarm-vi.com

Gửi email bằng máy chủ GMail SMTP từ một PHP trang

Tôi đang cố gắng gửi email qua máy chủ SMTP của GMail từ trang PHP, nhưng tôi gặp lỗi này:

xác thực thất bại

Có ai giúp được không? Đây là mã của tôi:

<?php
require_once "Mail.php";

$from = "Sandra Sender <[email protected]>";
$to = "Ramona Recipient <[email protected]>";
$subject = "Hi!";
$body = "Hi,\n\nHow are you?";

$Host = "smtp.gmail.com";
$port = "587";
$username = "[email protected]";
$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>");
 }
?>
362
skb
// Pear Mail Library
require_once "Mail.php";

$from = '<[email protected]>';
$to = '<[email protected]>';
$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' => '[email protected]',
        'password' => 'passwordxxx'
    ));

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

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

Sử dụng Swift mailer , khá dễ dàng để gửi thư thông qua thông tin đăng nhập Gmail:

<?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('[email protected]' => 'ABC'))
  ->setTo(array('[email protected]'))
  ->setBody('This is a test mail.');

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

Mã của bạn dường như không sử dụng TLS (SSL), điều này là cần thiết để gửi thư đến Google (và sử dụng các cổng 465 hoặc 587) .

Bạn có thể làm điều này bằng cách thiết lập 

$Host = "ssl://smtp.gmail.com";

Mã của bạn trông đáng ngờ như ví dụ này đề cập đến ssl: // trong sơ đồ tên máy chủ.

53
crb

Tôi không khuyên dùng Pear Mail. Nó đã không được cập nhật kể từ năm 2010. Cũng đọc các tệp nguồn; mã nguồn gần như đã lỗi thời, được viết theo kiểu PHP và nhiều lỗi/lỗi đã được đăng (Google nó). Tôi đang sử dụng Swift Mailer.

Swift Mailer tích hợp vào bất kỳ ứng dụng web nào được viết trong PHP 5, mang đến cách tiếp cận hướng đối tượng linh hoạt và thanh lịch để gửi email với vô số tính năng.

Gửi email bằng cách sử dụng SMTP, sendmail, postfix hoặc Transport tùy chỉnh thực hiện của riêng bạn.

Hỗ trợ các máy chủ yêu cầu tên người dùng và mật khẩu và/hoặc mã hóa.

Bảo vệ khỏi các cuộc tấn công tiêm tiêu đề mà không tước dữ liệu yêu cầu Nội dung.

Gửi email HTML/nhiều phần tuân thủ MIME.

Sử dụng các plugin hướng sự kiện để tùy chỉnh thư viện.

Xử lý tệp đính kèm lớn và hình ảnh nội tuyến/nhúng với bộ nhớ thấp sử dụng.

Đây là một nguồn mở và miễn phí mà bạn có thể Tải xuống Swift Mailer và tải lên máy chủ của bạn. (Danh sách tính năng được sao chép từ trang web của chủ sở hữu).

Ví dụ hoạt động của Gmail SSL/SMTP và Swift Mailer có ở đây ...

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

// Mail Transport
$transport = Swift_SmtpTransport::newInstance('ssl://smtp.gmail.com', 465)
    ->setUsername('[email protected]') // 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('[email protected]' => 'Sender Name')) // can be $_POST['email'] etc...
    ->setTo(array('[email protected]' => '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. :(';
}

Tôi hi vọng cái này giúp được. Chúc mừng mã hóa ... :)

32
Madan Sapkota
<?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   = "[email protected]";  // GMAIL username
$mail->Password   = "password";            // GMAIL password

$mail->SetFrom('[email protected]', 'PRSPS');

//$mail->AddReplyTo("[email protected]', '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 = "[email protected]";
$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!";
}

?>
28
Deept Raghav

SwiftMailer có thể gửi E-Mail bằng các máy chủ bên ngoài.

đây là một ví dụ cho thấy cách sử dụng máy chủ Gmail:

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));
20
Pekka 웃

Mã như được liệt kê trong câu hỏi cần hai thay đổi

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

Cổng 465 được yêu cầu cho kết nối SSL.

14
s01ipsist

Gửi thư bằng thư viện phpMailer qua Gmail Vui lòng tải các tệp thư viện từ 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 = "[email protected]";
//Password to use for SMTP authentication
$mail->Password = "yourpassword";
//Set who the message is to be sent from
$mail->setFrom('[email protected]', 'First Last');
//Set an alternative reply-to address
$mail->addReplyTo('[email protected]', 'First Last');
//Set who the message is to be sent to
$mail->addAddress('[email protected]', '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!";
}
5
Bhavin Solanki

Gmail yêu cầu cổng 465 và cũng là mã từ phpmailer :)

4
sandeep

Tôi cũng có vấn đề này. Tôi đặt cài đặt chính xác và đã bật các ứng dụng kém an toàn hơn nhưng nó vẫn không hoạt động. Cuối cùng, tôi đã bật cái này https://accounts.google.com/UnlockCaptcha , và nó hoạt động với tôi. Tôi hi vọng điêu nay se giup được ai đo.

3
Strategist

Để cài đặt Mail.php của PEAR trong Ubuntu, hãy chạy bộ lệnh sau:

    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
3
Nahid

Tôi có một giải pháp cho các tài khoản GSuite không có sufix "@ gmail.com". Ngoài ra, tôi nghĩ rằng nó sẽ hoạt động cho các tài khoản GSuite với @ gmail.com nhưng chưa thử. Trước tiên, bạn nên có các đặc quyền để thay đổi tùy chọn "allos¿w ứng dụng kém an toàn hơn" cho tài khoản GSuite của bạn. Nếu bạn có các đặc quyền (bạn có thể kiểm tra cài đặt tài khoản-> bảo mật) thì bạn phải hủy kích hoạt "xác thực hai yếu tố bước" đến cuối trang và đặt thành "có" để cho phép các ứng dụng kém an toàn hơn. Đó là tất cả. Nếu bạn không có đặc quyền để thay đổi các tùy chọn đó, giải pháp cho chủ đề này sẽ không hoạt động. Kiểm tra https://support.google.com/a(/6260879?hl=vi để thực hiện thay đổi đối với tùy chọn "cho phép ít hơn ...".