>  기사  >  백엔드 개발  >  PHP 이메일을 보내는 방법에 대한 자세한 설명

PHP 이메일을 보내는 방법에 대한 자세한 설명

php中世界最好的语言
php中世界最好的语言원래의
2018-05-16 11:07:032233검색

이번에는 PHP메일 보내기 사용법과 PHP 이메일 보내기 시 주의사항에 대해 자세히 설명하겠습니다. 실제 사례를 살펴보겠습니다.

이메일 보내기는 웹사이트의 일반적인 기능입니다. 사용자 활성화 및 비밀번호 검색과 같은 시나리오에서는 사용자 사서함으로 이메일을 보내야 하는 경우가 많습니다. 이 기사에서는 먼저 이메일 보내기와 관련된 개념을 검토한 다음 PHP를 사용하여 이메일을 보내기 위한 샘플 코드를 제공합니다.

문자 메시지 보내기

문자 메시지는 기능적으로 이메일과 유사하며 알림 및 보안 확인에 자주 사용됩니다. 문자 메시지를 보내려면 (기본적으로) 공급자에게 비용을 지불해야 하므로 SMS 공급자는 사용자가 액세스할 수 있는 명확한 문서와 사용하기 쉬운 인터페이스를 제공할 인센티브가 있습니다. 일반적으로 문자 메시지를 보내는 사람은 다음과 같습니다.

Alibaba Big Fish, Aggregated Data 등과 같은 공급업체를 찾고 있습니다.

계정을 등록하고 appid 및 appkey를 얻습니다.

인터페이스 보기;

문자 메시지를 보내려면 API를 호출하세요.

과정이 간단하고 이해하기 쉬우며, 기본적으로 한두 시간 안에 연결하고 테스트할 수 있어 매우 편리합니다. 사용자는 통신 과정에서 메시지 인코딩 및 주소 지정과 같은 세부 사항을 고려할 필요가 없습니다. 단점은 비용을 지불해야 한다는 것입니다.

이메일은 일반적으로 무료 서비스이지만 관련 지원이 제대로 제공되지 않는다는 점도 이해해야 합니다. 다양한

프로그래밍 언어

로 이메일을 보내기 위한 많은 클래스 라이브러리가 있습니다. 소스 관점에서 보면 기본적으로 로컬 컴퓨터에서 보내는 것과 타사 이메일 서비스 제공업체에서 보내는 두 가지 범주로 나눌 수 있습니다. 이메일을 보내는 과정을 이해하기 위해 먼저 몇 가지 관련 개념을 소개하겠습니다.

관련 개념

인터넷에 노출되는 대부분의 사람들은 이메일 사용 경험이 있지만 기본적으로 이메일 클라이언트, 웹 페이지 및 공급자 개념에 국한됩니다. 개발자로서 이 섹션의 다음 개념을 이해하면 이메일 통신의 세부 사항을 숙지하는 데 더 도움이 됩니다.

MUA: 메일 사용자 에이전트, 메일 사용자 에이전트. 유저 에이전트(User Agent)는 개발 과정에서 자주 접하는 단어로, 주로 인간의 의도를 이해하고 사용자를 대신해 자원을 요청하는 도구를 일컫는다. 예를 들어, 브라우저는 가장 일반적으로 사용되는 사용자 에이전트로 HTTP/HTTPS 프로토콜 형식으로 웹 서버에 요청을 보내고 응답을 구문 분석하여 사용자에게 렌더링합니다. 이메일 사용자 에이전트는 일반적으로 Foxmail 및 Outlook과 같은 도구입니다. 사람들이 이메일을 작성한 후 형식에 따라 이메일 내용을 캡슐화하고 메일 서버와 통신합니다.

MTA: 메일 전송 에이전트, 사용자가 이메일을 보내고 받는 데 도움을 주는 프로그램입니다. 자주 언급되는 메일 서버는 오픈 소스 프로그램인 sendmail, postfix, QMail 등을 의미합니다.

MRA: 메일 수집 에이전트인 메일 검색 에이전트는 로컬에서 메일 서버에서 사용자의 메일을 검색합니다. 메일 클라이언트는 일반적인 MRA입니다.

SMTP: 단순 메일 전송 프로토콜, 단순 메일 전송 프로토콜. 사용자, 메일 서버 및 메일 서버는 모두 이 프로토콜을 사용하여 메일을 서로에게 전송합니다(기본값은 일반 텍스트이며 SSLTLS 암호화를 사용할 수 있음).

POP3/IMAP: Post Office Protocol 버전 ​​3/Internet Message Access Protocol, Post Office Protocol 버전 ​​3 또는 네트워크 정보 수집 프로토콜, 클라이언트가 서버에서 메일을 가져오는 데 사용하는 프로토콜입니다.

사용자 A(163 메일함)가 사용자 B(Gmail 메일함)에게 편지를 보냅니다. 사용자 B가 편지를 받는 과정은 위의 개념과 관련됩니다. 프로세스와 개념적 관계는 다음과 같은 단순화된 다이어그램으로 표현할 수 있습니다.

用户A --发送邮件--> 用户B
 M|S         M|I
 U|M         R|M
 A|T         A|A
 |P         |P
 v          v
MTA(163)--转发(SMTP)->MTA(gmail)

참고: 위 그림은 이메일을 보내는 일반적인 프로세스를 보여줍니다. 기타 MSA, MDA, ESMTP, SMTPS 등이 전체 프로세스에 나타날 수 있지만 이메일 전송 및 수신에는 영향을 미치지 않습니다. 아래에 언급된 약어 및 개념에 대해서는 직접 확인하시기 바랍니다.

postfix

리눅스에서 이메일을 보내는 소프트웨어는 주로 sendmail과 postfix가 있는데, 시스템에서는 위 개념에서 MTA/MDA(Mail Delivery Agent, Mail Delivery Agent) 역할을 합니다. 이는 사용자가 아웃바운드 이메일을 보내고 사용자의 편지함(기본 위치 /var/spool/mail/username)으로 전달된 이메일을 받는 데 도움이 됩니다.

sendmail은 매우 높은 평판을 얻은 오랜 전통의 이메일 소프트웨어입니다. 하지만 Wietse(Wiestse Zweitze Venema)는 이에 만족하지 않아 접미사를 생각해 냈습니다. postfix 명령은 sendmail과 (거의) 호환되지만 더 효율적이고 안전합니다(접미사 수정의 출처). 현재 대부분의 Linux 배포판에 대한 기본 이메일 보내기 및 받기 소프트웨어입니다. sendmail 대신 postfix를 사용하는 것이 좋습니다. 수년 전에 이 블로그에 sendmail 구성 방법에 대한 기사가 있었습니다. 당시 저는 어리고 무지했기 때문에 시간을 내어 해당 기사를 개정할 계획이었습니다.

Postfix의 주요 구성 파일은 /etc/postfix/main.cf입니다. 구성 파일에는 주석이 잘 설명되어 있으며 옵션은 기본적으로 설명이 필요합니다. 가장 중요한 구성은 myhostname, myorigin, inet_interfaces, inet_protocols 및 mydestination(외부 세계로부터 편지를 받을 계획인 경우)입니다. inet_interfaces가 localhost로 구성되면 inet_protocols의 값은 ipv4여야 합니다. 그렇지 않으면 postfix: fatal: paramator inet_interfaces: no local interfacefound for ::1과 유사한 오류 메시지가 나타날 수 있습니다.

메일과 관련된 몇 가지 일반적인 postfix 명령은 다음과 같습니다.

mail 또는 mailx는 메일을 보냅니다. tlanyan 사용자는 루트에 이메일을 보냅니다: mail -s "Greetings" root@localhost -r tlanyan@localhost 그런 다음 터미널에 A nice day!를 입력하고 Enter를 누른 다음 ctrl+D를 눌러 텍스트 편집을 종료하면 이메일이 전송됩니다. 전송되었습니다. 루트 계정으로 로그인하면 /var/spool/mail/root에 새 이메일이 있다는 메시지가 표시됩니다. 이메일의 자세한 정보를 보려면 tail 또는 기타 명령을 사용하십시오.

postquque, 이메일 전송 대기열을 확인하세요. postqueue -p는 sendmail의 mailq 명령을 대체할 수 있으며 postqueue -f는 대기열을 새로 고칩니다(대기열에서 메일 전송을 강제로 시도합니다).

postcat, 보내지 않은 이메일 정보를 확인해보세요. 예를 들어 postcat -q xxxx(xxxx는 postqueue 또는 mailq에 표시되는 전송되지 않은 대기열 ID)는 이메일의 세부 정보를 볼 수 있고 postcat -b -q xxxxx는 이메일 본문만 볼 수 있습니다.

postsuper, 슈퍼 유저만 사용할 수 있는 이메일 관리 프로그램입니다. postsuper -d xxxx, 대기열 ID xxxxx를 가진 메일 삭제, postsuper -h xxxxx, 대기열 ID xxxx를 가진 메일 전송 일시 중지 등.

위 소개는 기본적으로 이메일 보내기에 충분합니다. mail 명령으로 보낸 메일은 postfix가 실행 중인 경우에만 배달될 수 있습니다(ps aux | grep postfix | grep -v grep 출력이 비어 있지 않음).

postfix를 사용하면 구성 후 외부 세계로 이메일을 보내고 외부 네트워크에서 이메일을 받을 수 있지만 명령줄 작업으로 제한됩니다. Foxmail과 같은 클라이언트를 사용하여 이메일을 보내고 받으려면 서버가 POP3/IMAP 프로토콜을 지원하도록 해야 합니다. 오픈 소스 비둘기장은 이 기능을 달성할 수 있습니다. Dovecot은 이메일을 보내는 것보다 받는 역할을 합니다. 이를 이해하는 것은 개발에 거의 도움이 되지 않습니다. 완벽한 이메일 시스템(웹페이지 지원, 스팸 필터링, 바이러스 탐지, 전송 암호화 등 포함)을 구축하고 싶다면 국내 오픈소스인 EwoMail을 참고하거나 활용하는 것이 좋습니다.

개발 중에 이메일을 보낼 때 postfix를 아는 것이 얼마나 도움이 되나요? 솔직히 말하면 거의 도움이 되지 않습니다. 그 이유는 스팸 확산을 막기 위해 주요 클라우드 서버 제조사들이 포트 25를 차단했기 때문이다(구글 클라우드는 포트 465까지 차단했다). Amazon Cloud는 애플리케이션을 통해 출시될 수 있으며(단, 속도 및 일일 할당량 제한이 있음), 다른 공급업체에서는 사용자가 자신의 도메인 이름을 사용하여 이 시스템에서 직접 이메일을 보내는 것을 거의 허용하지 않습니다. 포트 25를 차단하고 타사 이메일 서비스를 사용하는 것은 업계에서 거의 표준 관행입니다.

똑똑한 사람들은 이메일을 보내기 위해 암호화된 포트 465(SMTPS, SSL 프로토콜을 통한 SMTP 기반) 또는 포트 587(STARTTLS 프로토콜을 통한 SMTP)을 사용하면 제한을 피할 수 있다고 생각할 수도 있습니다. Alibaba Cloud/Tencent Cloud 및 기타 제조업체는 포트 465를 차단하지 않습니다. 이 포트를 사용하면 신청하지 않고도 이메일을 보낼 수 있습니다. 그러나 포트 465와 587은 클라이언트와 메일 서버 간의 통신에 사용되는 포트이고 포트 25는 메일 서버 간의 통신에 사용됩니다. 포트 465를 통해 Gmail 편지함에 연결하여 외부로 이메일을 보낼 수 있지만 postfix가 포트 465를 사용하여 핫메일 메일 서버에 이메일을 전달하도록 할 수는 없습니다.

요약하자면, sendmail/postfix는 스팸과 사기성 이메일이 확산되기 전의 메일 서버 소프트웨어로서 업계에 큰 공헌을 했습니다. 클라우드 서버의 인기로 인해 로컬 컴퓨터를 가리키는 도메인 이름으로 이메일을 보내는 것은 거의 불가능합니다. Sendmail/postfix는 로컬 컴퓨터 내에서 알림 이메일을 보내는 것 외에는 거의 사용되지 않습니다. 외부로 이메일을 보내려면 자체 컴퓨터실을 구축하거나 타사 이메일 시스템을 사용해야 합니다.

PHP의 메일 기능

PHP 개발자로서 sendmail/postfix를 이해하는 것은 여전히 ​​유용합니다. 메일 기능은 기본적으로 sendmail/postfix를 사용하여 이메일을 보냅니다. 관련 구성을 이해하면 작동할 수 있는 이유와 작동할 수 없는 이유를 알 수 있습니다.

간단히 말하면, PHP에 내장된 메일 기능이 제대로 작동하려면 다음을 수행해야 합니다.

도메인 이름을 신청하고, DNS 확인에서 MX 레코드를 설정하고, 로컬 컴퓨터(비법적 호스트)를 가리킵니다. (FQDN, 정규화된 도메인 이름)) 보낸 모든 이메일은 스팸으로 직접 삭제됩니다.

sendmail/postfix를 설치하고 소프트웨어를 구성한 후 실행합니다.

방화벽, 보안 그룹 및 릴리스 포트를 구성합니다.

낮은 전송 효율성, 비객체 지향 호출 방식, 번거로운 구성, 클라우드 서버 제조사의 봉쇄 등이 메일 기능을 사용하는데 가장 큰 걸림돌입니다. 그래서 저는 PHP로 작업을 시작한 이후로 메일 기능을 직접 사용해 본 적이 없습니다.

PHP发送邮件

发个邮件要了解这么多,会让人觉得很心累。说好的PHP是最好的语言呢?

PHP发送邮件也可以很简单,推荐方式就是使用Swift Mailer或PHPMailer等类库。引入这些类库后,注册第三方邮箱(比如Gmail、QQ等),填好用户名密码,配置好STMP地址和端口,就能像发送短信一样轻松发送邮件。当然这些类库也支持使用sendmail/postfix发送邮件,但我想你不会再这样做了。

以Swift Mailer为例,直接上代码说明使用PHP发送邮件也是一个非常简单的事情!

首先,在项目中引入Swift Mailer:

composer require "swiftmailer/swiftmailer:^6.0"

然后准备好邮件内容(以文本文件为例,不带附件):

$message = (new Swift_Message('Test Message'))
  ->setFrom(['tlanyan@tlanyan.me' => 'tlanyan'])
  ->setTo(['tlanyan1@tlanyan.me'])
  ->setBody('Hello, this is a test mail from Swift Mailer!');

接着,设置好邮件传输方式(使用Gmail邮箱):

$transport = (new Swift_SmtpTransport('smtp.gmail.com', 465, 'ssl'))
  ->setUsername('username')
  ->setPassword('password');

或者使用sendmail/postfix的方式(不推荐):

$transport = (new Swift_SendmailTransport());

最后,使用transport构造mailer实例,发送邮件:

$mailer = new Swift_Mailer($transport);
$result = $mailer->send($message);

相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!

推荐阅读:

PHP+MySQL实现消息队列步骤详解

ES6使用技巧总结

위 내용은 PHP 이메일을 보내는 방법에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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