it-swarm-ko.com

PHP Mailer를 통해 Gmail SMTP 서버를 사용하여 이메일 보내기

Gmail SMTP 서버 PHP 메일러 를 사용하여 이메일을 보내고 싶습니다. .

이건 내 코드 야.

<?php
require_once('class.phpmailer.php');

$mail = new PHPMailer();
$mail->IsSMTP();
$mail->CharSet="UTF-8";
$mail->SMTPSecure = 'tls';
$mail->Host = 'smtp.gmail.com';
$mail->Port = 587;
$mail->Username = '[email protected]';
$mail->Password = 'valid password';
$mail->SMTPAuth = true;

$mail->From = '[email protected]';
$mail->FromName = 'Mohammad Masoudian';
$mail->AddAddress('[email protected]');
$mail->AddReplyTo('[email protected]', 'Information');

$mail->IsHTML(true);
$mail->Subject    = "PHPMailer Test Subject via Sendmail, basic";
$mail->AltBody    = "To view the message, please use an HTML compatible email viewer!";
$mail->Body    = "Hello";

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

하지만 난이 다음과 같은 오류가 나타납니다

Mailer Error: SMTP Error: The following recipients failed: [email protected]

SMTP server error: SMTP AUTH is required for message submission on port 587

내 도메인은 vatandesign.ir

69
Mohammad Masoudian
$mail = new PHPMailer(); // create a new object
$mail->IsSMTP(); // enable SMTP
$mail->SMTPDebug = 1; // debugging: 1 = errors and messages, 2 = messages only
$mail->SMTPAuth = true; // authentication enabled
$mail->SMTPSecure = 'ssl'; // secure transfer enabled REQUIRED for Gmail
$mail->Host = "smtp.gmail.com";
$mail->Port = 465; // or 587
$mail->IsHTML(true);
$mail->Username = "[email protected]";
$mail->Password = "password";
$mail->SetFrom("[email protected]");
$mail->Subject = "Test";
$mail->Body = "hello";
$mail->AddAddress("[email protected]");

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

위의 코드는 테스트를 거쳐 저에게 도움이되었습니다.

$mail->SMTPSecure = 'ssl';가 필요할 수도 있습니다.

또한 해당 계정에 대한 2 단계 인증을 사용하지 않도록 설정해야 문제가 발생할 수 있습니다.

업데이트 됨

$ mail-> SMTP를 다음과 같이 변경해보십시오.

$mail->SMTPSecure = 'tls';

일부 SMTP 서버가 연결을 차단한다는 점은 주목할 가치가 있습니다. 일부 SMTP 서버는 SSL (또는 TLS) 연결을 지원하지 않습니다.

128
andrew-caulfield

그래서 난 그냥 내 자신의 "SMTP 연결 실패"오류를 해결하고 다른 사람을 돕기 위해 솔루션을 게시하고 싶었어.

PHPMailer 예제 gmail.phps 파일에 제공된 EXACT 코드를 사용했습니다. MAMP를 사용하는 동안 간단히 작동 한 다음 개인용 서버로 옮긴 후 SMTP 연결 오류가 발생했습니다.

내가 읽은 모든 스택 오버 플로우 응답과 PHPMailer의 모든 문제 해결 문서에서 PHPMailer에 문제가 없다고 말했다. 그것은 서버 측의 설정 문제였습니다. 나는 다른 포트 (587, 465, 25)를 시도했고, 나는 'SSL'과 'TLS'암호화를 시도했다. 내 openssl이 내 php.ini 파일에서 활성화되었는지 확인했습니다. 나는 방화벽 문제가 없다는 것을 확인했다. 모든 것이 체크 아웃되었고, 여전히 아무것도 아닙니다.

해결책은이 줄을 제거해야한다는 것이 었습니다.

$mail->isSMTP();

이제 모든 것이 작동합니다. 왜 그런지는 모르겠지만 작동합니다. 나머지 코드는 PHPMailer 예제 파일에서 복사하여 붙여 넣습니다.

26
Evan Butler

또한 두 가지 요소 인증을 사용하도록 설정 한 경우 이메일 계정 비밀번호 대신 사용할 애플리케이션 비밀번호를 설정해야합니다.

다음 안내에 따라 애플리케이션 비밀번호를 생성 할 수 있습니다. https://support.google.com/accounts/answer/1858

그런 다음 $mail->Password를 애플리케이션 비밀번호로 설정하십시오.

8
Tim Carr

서버가 Gmail SMTP 서버에 연결하지 못하는 것 같습니다. 다음은이 문제를 해결하기위한 몇 가지 힌트입니다 : 1) PHP (이 모듈을 처리하는 모듈이 PHP에 기본적으로 설치되어 있지 않은 경우 phph.ini에서 구성을 확인해야합니다. 2) 방화벽이 필요한 포트 (여기서는 465 또는 587)로 나가는 호출을 허용하는지 확인하십시오. 텔넷을 사용하십시오. 포트가 열리지 않으면 config를 설정하기 위해 sysdmin의 일부 지원이 필요합니다. 나는 당신이 이것을 빨리 소트하기를 바란다!

5
Pr Shadoko

이 --- 링크 을 열고 지침을 따르십시오. Google 서버는 알 수없는 서버의 시도를 차단하므로 captcha를 클릭하면 모든 것이 괜찮을 것입니다.

3
Yasin Hassanien

Google은 스팸 발송자를 차단하기 위해 사용 가능한 사용자 정보에 따라 Gmail 계정을 다르게 처리합니다.

전화 확인을 할 때까지 SMTP를 사용할 수 없었습니다. 다시 한 번 확인해 볼 또 다른 계정을 만들었습니다.

1
Forgot My Login 12
 $mail->SMTPOptions = array(
                'ssl' => array(
                    'verify_peer' => false,
                    'verify_peer_name' => false,
                    'allow_self_signed' => true
                )
            );
0
brandenM

나에게 잘 작동하는이 코드

    $mail = new PHPMailer;
    //Enable SMTP debugging. 
    $mail->SMTPDebug = 0;
    //Set PHPMailer to use SMTP.
    $mail->isSMTP();
    //Set SMTP Host name                          
    $mail->Host = $hostname;
    //Set this to true if SMTP Host requires authentication to send email
    $mail->SMTPAuth = true;
    //Provide username and password     
    $mail->Username = $sender;
    $mail->Password = $mail_password;
    //If SMTP requires TLS encryption then set it
    $mail->SMTPSecure = "ssl";
    //Set TCP port to connect to 
    $mail->Port = 465;
    $mail->From = $sender;  
    $mail->FromName = $sender_name;
    $mail->addAddress($to);
    $mail->isHTML(true);
    $mail->Subject = $Subject;
    $mail->Body = $Body;
    $mail->AltBody = "This is the plain text version of the email content";
    if (!$mail->send()) {
        echo "Mailer Error: " . $mail->ErrorInfo;
    }
    else {
           echo 'Mail Sent Successfully';
    }
0
Zohaib Hussain

Anderscc가 맞습니다. 감사. 그것은 나를 위해 일했지만 100 %는하지 못했습니다.

나는 설정해야했다.

$ mail-> SMTPDebug = 0; 1로 설정하면 특히 일부 데이터를 json으로 다음 페이지로 전달하는 경우 오류가 발생할 수 있습니다. 예 - json을 사용하여 메일이 전송되면 확인을 수행하여 ajax를 통해 데이터를 전달합니다.

나는 "SMTP connect () failed"와 "SMTP ERROR : Password command failed"라는 오류를 없애기 위해 나의 Gmail 계정 보안 설정을 낮춰야했다.

솔루션 :이 문제는 전자 메일 계정을 사용하려는 '보안 수준이 낮은'응용 프로그램 (Google 도움말에 따라 안전하지 않은 내용과 그렇지 않은 내용을 판단하는 방법이 확실하지 않음) OR (예 : VPN을 사용하거나 코드를 다른 서버로 이동하거나 실제로 다른 지역에서 로그인을 시도하는 경우) OR 행에 여러 번 로그인하려고합니다.

문제를 해결하는 링크 (Google 계정에 로그인해야 함) :

참고 : 자세한 참조를 위해 다음 stackoverflow 응답 링크로 이동할 수 있습니다.

https://stackoverflow.com/a/25175234

0
Akshay P. Raul

CPanel을 사용한다면 SMTP로 외부 서버로 보낼 수있는 상자를 클릭하기 만하면됩니다.

CPanel에 로그인> 설정 변경> 전체> "발신 SMTP를 root, exim 및 mailman (FKA SMTP Tweak)으로 제한"

여기에서 대답 한대로 :

Gmail에서 phpMailer로 보낼 때 "서버에서 비밀번호를 허용하지 않습니다 : 535 잘못된 인증 데이터"

0
Tristanisginger