PHP 페이지에서 Gmail SMTP 서버를 사용하여 이메일 보내기
PHPPHP 페이지에서 Gmail SMTP 서버를 사용하여 이메일 보내기
나는 PHP 페이지에서 Gmail의 SMTP 서버를 통해 이메일을 보내려고하지만 다음 오류가 발생합니다.
누구든지 도와 줄 수 있습니까? 여기 내 코드가 있습니다 :
<?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>");
}
?>
해결법
-
==============================
1.
// 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>'); }
-
==============================
2.
신속한 메일러를 사용하면 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('abc@example.com' => 'ABC')) ->setTo(array('xyz@test.com')) ->setBody('This is a test mail.'); $result = $mailer->send($message); ?>
-
==============================
3.
코드가 TLS (SSL)을 사용하지 않는 것 같습니다. 이는 Google에 메일을 전달하는 데 필요하며 포트 465 또는 587을 사용하는 것입니다.
당신은 이것을 설정함으로써 할 수 있습니다.
$ host = "ssl : //smtp.gmail.com";
코드는 호스트 이름 체계에서 ssl : //을 참조하는이 예제와 같이 의심스럽게 보입니다.
-
==============================
4.
배 메일은 권장하지 않습니다. 2010 년 이후로 업데이트되지 않았습니다. 또한 소스 파일을 읽습니다. 소스 코드가 거의 구식이며 PHP 4 스타일로 작성되었으며 많은 오류 / 버그가 게시되었습니다 (Google it). 나는 Swift Mailer를 사용하고있다.
Swift Mailer는 PHP 5로 작성된 모든 웹 응용 프로그램에 통합되어 다양한 기능을 갖춘 이메일을 전송할 때 유연하고 우아한 객체 지향 방식을 제공합니다.
무료 Swift Mailer를 다운로드하여 서버에 업로드 할 수있는 무료 오픈 소스입니다. (기능 목록은 소유자 웹 사이트에서 복사됩니다.)
Gmail SSL / SMTP와 Swift Mailer의 실제 작동 예제는 다음과 같습니다.
// 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. :('; }
이게 도움이 되길 바란다. 해피 코딩 ... :)
-
==============================
5.
<?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!"; } ?>
-
==============================
6.
SwiftMailer는 외부 서버를 사용하여 전자 메일을 보낼 수 있습니다.
다음은 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));
-
==============================
7.
질문에 나열된 코드에는 두 가지 변경 사항이 필요합니다.
$host = "ssl://smtp.gmail.com"; $port = "465";
포트 465는 SSL 연결에 필요합니다.
-
==============================
8.
Gmail을 통해 phpMailer 라이브러리를 사용하여 메일 보내기 Github에서 라이브러리 파일을 donwload하십시오.
<?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!"; }
-
==============================
9.
Gmail은 포트 465가 필요하며 phpmailer의 코드이기도합니다. :)
-
==============================
10.
나는이 문제도 가지고 있었다. 올바른 설정을 지정하고 덜 안전한 응용 프로그램을 활성화했지만 여전히 작동하지 않았습니다. 마지막으로 https://accounts.google.com/UnlockCaptcha를 사용 설정 했으므로 저에게 효과적이었습니다. 나는 이것이 누군가를 돕기를 바랍니다.
-
==============================
11.
PEAR의 Mail.php를 우분투에 설치하려면 다음 명령을 실행하십시오 :
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
-
==============================
12.
세트
'auth' => false,
또한 포트 25가 작동하는지 확인하십시오.
from https://stackoverflow.com/questions/712392/send-email-using-the-gmail-smtp-server-from-a-php-page by cc-by-sa and MIT lisence
'PHP' 카테고리의 다른 글
PDO 준비된 진술은 SQL 주입을 방지하기에 충분한가요? (0) | 2018.09.01 |
---|---|
mysql 확장 기능은 향후 제공되지 않을 예정이며 앞으로 제거 될 예정입니다. 대신 mysqli 또는 PDO를 사용하십시오 [duplicate] (0) | 2018.09.01 |
기본 "긴 폴링"을 어떻게 구현합니까? (0) | 2018.09.01 |
최대 업로드 파일 크기 변경 (0) | 2018.09.01 |
PHP에서 두 문자열을 결합하는 방법은 무엇입니까? (0) | 2018.09.01 |