>백엔드 개발 >PHP 튜토리얼 >gmail_php 기술을 통해 이메일을 보내도록 phplist와 phpmailer(조합 사용)를 구성하는 방법

gmail_php 기술을 통해 이메일을 보내도록 phplist와 phpmailer(조합 사용)를 구성하는 방법

WBOY
WBOY원래의
2016-05-16 19:55:111346검색

이 기사의 예에서는 Gmail을 통해 이메일을 보내는 phplist 및 phpmailer의 구성 방법을 설명합니다. 참고하실 수 있도록 모든 사람과 공유하세요. 자세한 내용은 다음과 같습니다.

일반적으로 Gmail 사서함을 사용하지 않는 한 phplist를 사용하여 이메일을 보내는 것은 이전 "PHP 대량 메일 시스템의 phplist 구성 방법에 대한 자세한 요약". 하지만 나처럼 운이 좋지 않아 Gmail과 같은 SSL 확인이 포함된 이메일을 사용해야 한다면 축하합니다. 며칠 간의 노력 끝에 마침내 gmail과 phplist를 성공적으로 결합했습니다. 저와 같은 상황에 있는 모든 동지들에게 도움이 되길 바라면서 제 경험을 이곳에서 공유하고 있습니다. 그리고 phplist의 핵심은 phpmailer인데 제가 제안한 솔루션은 주로 phpmailer를 중심으로 진행되기 때문에 Gmail을 통해 이메일을 보내기 위해 phpmailer를 사용해야 하는데 성공하지 못하는 분들도 제 방법을 참고하시면 될 것 같습니다.

먼저 "

PHP 대량 이메일 시스템 phplist 구성 방법 세부 요약"의 구성 방법에 따라 Gmail을 통해 이메일을 보냅니다. 테스트 이메일을 보낼 때 phplist는 이메일 전송 실패를 보고합니다. 이벤트 로그(eventlog) 보낸 사람 주소에 문제가 있음을 나타내는 "메일러 오류: 다음 보낸 사람 주소가 실패했습니다:..."라는 오류 메시지가 표시됩니다. SMTP 서버가 연결되어 있는데 이메일 전송에 문제가 있는 경우도 있나요? SMTP 서버에 연결되어 있는지 테스트하는 방법을 사용할 수 있습니다. config.php 파일에 의도적으로 잘못된 이메일 계정 비밀번호를 입력했지만 테스트 이메일을 보냈을 때 여전히 동일한 오류가 보고된 것 같습니다. SMTP 서버에 전혀 연결되지 않았습니다. 이 phplist의 오류 보고서도...

SMTP 서버에 연결되어 있지 않다는 것을 알고 있다면 또 다른 유명한 오픈 소스 소프트웨어인 phpmailer인 phplist 이메일 전송의 핵심에 문제가 있다는 의미입니다.

온라인에서 Gmail 이메일을 보내는 phpmailer에 대한 정보를 확인한 결과, 사람들이 이전 버전의 phpmailer가 SSL 확인을 지원하지 않고 Gmail의 SMTP 서버에 연결할 수 없다고 말하는 것을 발견했습니다. 이 문제는 phpmailer의 새 버전에서 해결되었습니다.

lists/admin/phpmailer/ChangeLog.txt를 열고 최신 버전의 phplist가 2005년에 출시된 phpmailer 버전 1.73과 함께 제공되는 것을 확인하세요. 이는 실제로 새로운 것이 아닙니다. 그래서 phpmailer 공식 홈페이지에 가서 최신 5.1을 다운로드 받았습니다.

먼저 phpmailer의 새 버전이 SSL 확인 문제를 어떻게 해결하는지 연구하고 싶었기 때문에 함께 제공되는 문서 중 일부를 살펴보던 중 PHPMailer_v5.1/docs에서 use_gmail.txt를 발견했습니다. 관계자는 Gmail 문제에 더 많은 관심을 기울이고 사람들이 참고할 수 있도록 특별히 데모를 출시했습니다. 열어보면 그야말로 완전한 PHP 페이지 파일입니다. 기본적으로는 파일 확장자, 이메일 사용자 이름, 비밀번호만 수정하면 사용이 가능합니다. 하지만 이렇게만 수정하면 테스트 접속 시 오류가 발생합니다. 페이지의 공식 데모를 모릅니다. 실제로 정의되지 않은 함수를 호출하고 불필요한 구성 요소가 있는 경우 어떻게 이런 오류가 발생할 수 있습니까? 이메일이 정상적으로 전송되는지 테스트해보고 싶어서 다음과 같이 변경했습니다.

<&#63;php
    // example on using PHPMailer with GMAIL
    include("class.phpmailer.php");
    include("class.smtp.php"); // note, this is optional - gets called from main class if not already loaded
    $mail       = new PHPMailer();
    $body       = "test";
    $mail->IsSMTP();
    $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
    $mail->Username  = "myname@gmail.com"; // GMAIL username
    $mail->Password  = "mypassword";      // GMAIL password
    $mail->From    = "myname@gmail.com";
    $mail->FromName  = "Webmaster";
    $mail->Subject  = "This is the subject";
    $mail->AltBody  = "This is the body when user views in plain text format"; //Text Body
    $mail->WordWrap  = 50; // set word wrap
    $mail->MsgHTML($body);
    $mail->AddReplyTo("myname@gmail.com","Webmaster");
    $mail->AddAddress("myname@gmail.com","First Last");
    $mail->IsHTML(true); // send as HTML
    if(!$mail->Send()) {
     echo "Mailer Error: " . $mail->ErrorInfo;
    } else {
     echo "Message has been sent";
    }
&#63;>

이 페이지에 접속하면 여전히 오류가 보고되는데, 공식 데모를 실행할 수 없는 이유가 무엇인가요?

이때 문득 PHPMailer_v5.1/docs 밑에 Note_for_SMTP_debugging.txt라는 파일이 있다는 게 생각났어요. 이제 SMTP 서버에 접속이 안 될까봐 걱정되서 한번 살펴보는 게 좋을 것 같아요. 디버깅 방법이 제공됩니다.

파일을 열어서 첫줄을 읽어보니 눈이 번쩍 뜨이더라구요. 사실 사용법도 아주 간단해요

만 이용하시면 됩니다

$mail->IsSMTP();

앞에 삽입

$mail->SMTPDebug = 1;

오류를 신고하면 더 자세한 오류 정보를 얻을 수 있습니다. 참 다행이네요^_^

이렇게 수정한 후 페이지 방문 시 더 자세한 지침을 받았습니다. - "SMTP -> 오류: 서버 연결 실패: 소켓 전송 "ssl"을 찾을 수 없습니다. - 활성화할 때 활성화하는 것을 잊었나요? PHP(28593608)를 구성했습니까?

그렇습니다. 그래서 PHP 구성 파일(C://Windows/php.ini)을 열고 ssl을 검색했는데, 당연히 ssl에 대한 확장자를 찾았습니다

;extension=php_openssl.dll

它没有被打开。去掉其前面用于注释的“;”,然后重启服务器,再次访问测试页面use_gmail.php,仍然是同样的错误提示。

没办法了,我上网查了一下关于php以及apache的ssl配置的文章,发现仅仅是将ssl扩展模块开启是不够的,还要对openssl进行配置,在Windows环境下配置方法倒是很简单——找到php安装目录下的ssleay32.dll和libeay32.dll,将这二者复制到windows下的system32目录中即可(在php.ini中开启extension=php_openssl.dll还是必要的)。当然,不想“污染”system32目录的同志们可以用修改环境变量的方法,只要让ssleay32.dll和libeay32.dll在系统路径下就可以了。(如果你使用的不是winidows操作系统,请上网查找针对你的操作系统的配置ssl的方法,应该不难找到)

这回再访问use_gmail.php发现可以成功发送了!

在此基础上,我们的phplist的问题也可以解决了:用新版phpmailer中的class.phpmailer.php和class.smtp.php覆盖lists/admin/phpmailer中的对应文件,然后修改lists/admin/class.phplistmailer.php中36行左右处的

$this->SMTPAuth = true;
$this->Helo = getConfig("website");
$this->Host = PHPMAILERHOST;

为:

$this->IsSMTP();            # Add
$this->SMTPAuth = true;
$this->SMTPSecure = "ssl";       # Add
$this->Helo = getConfig("website");
$this->Host = PHPMAILERHOST;
$this->Port = 465            # Add

其中phpmailer默认端口号为25,是大多数smtp服务器的端口号,但是gmail使用的端口号是465,所以要重新设置。

更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP网络编程技巧总结》、《PHP基本语法入门教程》、《php操作office文档技巧总结(包括word,excel,access,ppt)》、《php日期与时间用法总结》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总

希望本文所述对大家PHP程序设计有所帮助。

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.