2016. 9. 6. 11:06

PHP로 Gmail SMTP 사용하기

composer 로 PHPMailer를 설치한다.

리눅스 서버에 OpenSSL 확장이 설치 되어있어야 한다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
<?php
 
namespace google;
 
require __DIR__.'/../../_composer/vendor/autoload.php';
 
/**
 * Class GmailApi
 * TODO: OpenSSL Extension 이 있는 지 확인할 것.
 * @package google
 */
class GmailApi
{
    const FROM = '보내는이';
    const FROM_MAIL = 'Gmail주소';
    const FROM_PASSWORD = 'GMail비밀번호';
 
    /**
     * @param $toMail
     * @param $subject
     * @param $msg
     * @return bool
     * @throws \phpmailerException
     */
    public function send($toMail$subject$msg)
    {
        $mail = new \PHPMailer();
        $mail->isSMTP();
        $mail->SMTPAuth = true;
        $mail->SMTPSecure = 'tls';
        $mail->Host = 'smtp.gmail.com';
        $mail->Port = 587;
        $mail->Username = self::FROM_MAIL;
        $mail->Password = self::FROM_PASSWORD;
        $mail->setFrom(self::FROM_MAIL, self::FROM);
        $mail->addReplyTo(self::FROM_MAIL, self::FROM);
        $mail->CharSet = 'UTF-8';
        $mail->Subject = $subject;
        $mail->msgHTML($msg);
        $mail->addAddress($toMail);
        return $mail->send();
    }
}
 
cs


Gmail 에서 Imap 을 Enable 해야하고

구글계정 설정에서 보안 수준이 낮은 앱의 액세스를 허용해야 이용이 가능함


SMTPSecure = 'ssl', Port = 465 로도 접속 가능하다.


만약 설정에 이상이 없는데 아래 오류가 발생한다면 나와있는 링크를 방문에서 문제를 확인해보면 된다.

SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting


Gmail계정으로 IMAP을 처음 접속하게 되면 별도로 접속허용을 해줘야 이용이 가능한데.

$mail->SMTPDebug = 2; 로 설정하고 송수신되는 내용을 살펴보면

서버에서 https://accounts.google.com/signin/continue?sarp=1&scc=1&plt=AKgnsb.... 와같은 내용을 수신 받으면서 password faile 이 뜨는 경우가 난다.

서버에서 내려받은 주소를 웹브라우저에 연결해서 작업을 해줘야 하지만 소켓이라 안된다.

해결방법은 Troubleshooting 링크에도 나와있지만 웹브라우저로 사용하려는 gamil 계정에 로그인 한뒤에

https://www.google.com/accounts/DisplayUnlockCaptcha 링크를 방문해서 허용해주면 된다.