Php 메일 및 smtp 작동 원리. 이메일 보내기(SMTP 대

/ 하드 드라이브

로컬 서버에서 SMTP를 통해 메일을 보내면 로컬 컴퓨터에 있는 사이트, 더 간단하게는 로컬 서버에서 메시지 보내기를 테스트할 수 있습니다. 이를 위해 Yandex, Google 또는 mail.ru 메일 서비스를 사용할 수 있습니다.

우선, SMTP(Simple Mail Transfer Protocol)가 널리 사용됩니다. 네트워크 프로토콜, 전송용 이메일 TCP/IP 네트워크에서. 그리고 널리 사용되는 모든 이메일 서비스에는 이러한 프로토콜이 있습니다.

로컬 서버의 출현으로 개별 스크립트나 cms 시스템의 성능을 확인하기 위해 더 이상 호스팅 제공업체를 선택할 필요가 없었고 그에 따른 비용도 더 이상 들지 않았습니다. 컴퓨터에서 모든 것을 테스트하는 것이 훨씬 쉬우며, 자신이 "수행한" 작업을 모든 사람에게 보여줄 수 있습니다.

이러한 서버 중 다수에는 이미 내장된 소프트웨어메일 작업에 필요한 기능을 올바르게 구성하기만 하면 됩니다.

해당 메일의 기능을 확인하려면 최소한 다음 사항이 필요합니다.

  • Openserver를 로컬 서버로 사용할 수 있습니다.
  • 그리고 템플릿이 바로 아래에 있는 간단한 스크립트도 있습니다.
  • 모든 메일 서버를 사용할 수 있습니다.

SMTP 스크립트 설정을 통해 PHP 메일 보내기

아래에서 복사하거나 수백 개의 유사한 사이트에서 다운로드할 수 있는 간단한 스크립트 템플릿을 편집해야 합니다.

먼저 스크립트 템플릿에서 일부 값을 변경해야 합니다.
에게 — 메일 메시지가 전송될 우편 주소로 변경합니다.
주제 — 편지의 제목
메시지 — 메시지 자체 또는 편지 본문.

내 스크립트의 예:

물론 기능을 약간 확장하여 스크립트가 메일 전송에 대한 메시지를 표시하도록 할 수 있습니다. 실제로 전송을 수행하는 것은 SMTP 서버이고 스크립트는 메시지만 생성합니다.

예를 들어 다음과 같이 작성할 수 있습니다.

모든 대체 값은 따옴표로 묶어야 합니다. 그렇지 않으면 스크립트에서 오류가 발생합니다. 그런 다음 스크립트를 로컬 서버 폴더에 저장할 수 있습니다.

예를 들어: 도메인/send/index.php SMTP opensrever를 통해 메일 전송 설정을 시작합니다.

메일은 값 대신 스크립트에 지정된 주소로 도착합니다. '에게' 하지만 이 메일은 openserver 설정에 지정된 SMTP에 의해 정확하게 처리되고 전송됩니다.

  1. 서버 시작
  2. "mail" 메뉴의 설정으로 openserver 모듈을 엽니다.
  3. 그림과 같이 모든 필드를 채우고 Yandex의 실제 사서함에 있는 사용자 이름, 보낸 사람의 이메일 및 비밀번호를 대체합니다.

설정을 저장하고 서버가 다시 시작된 후 스크립트 자체에 액세스할 수 있습니다. "내 사이트" 폴더에서 이전에 저장한 index.php 스크립트가 있는 "send" 폴더를 엽니다.

이 스크립트에 액세스하자마자 새 브라우저 창에 스크립트가 완료되었음을 나타내는 정보가 나타납니다.

이 후에는 귀하의 사서함, 편지가 도착했는지 여부에 관계없이 스크립트에 주소가 지정되었습니다.

거기에 없으면 무언가가 올바르게 구성되지 않았거나 편지가 스팸 폴더에 있다는 의미입니다.

다른 모든 설정은 비슷해 보이지만 만약을 대비해 추가 정보아프지 않을 것입니다.

SMTP mail ru를 통해 메일 전송을 설정하려면 Yandex 매개변수를 mail ru 매개변수로 바꾸면 됩니다.

그리고 매번 다시 작성하지 않도록 로컬 서버, 다른 openserver 프로필을 구성하는 것이 가장 좋습니다. 이를 수행하는 방법은 비디오 튜토리얼에 나와 있습니다.

이 경우 프로필을 로드하기만 하면 충분하며 서버를 다시 시작한 후에는 이 프로필에 지정된 모든 설정을 사용할 수 있습니다. 그것은 매우 편리하고 매우 간단하게 작동합니다.

각 프로필(이름은 전혀 중요하지 않음)에 대해 고유한 설정을 지정해야 합니다. 물론 스크립트, cms 시스템 및 다른 매개변수가 있는 응용 프로그램을 사용하려는 경우는 예외입니다.
그렇지 않은 경우 기본 설정을 사용하면 됩니다.

SMTP 메일 ru의 경우 모든 것이 동일합니다.

Yandex 데이터가 메일 ru 데이터로 변경되었습니다.

smtp google을 통해 메일 보내기

Google SMTP를 통해 메일 전송을 설정하려면 약간의 노력이 필요합니다.

첫째, Google에서 프로필을 만드는 것이 다른 Yandex 및 메일 ru 시스템보다 어렵습니다.
둘째, 귀하가 로그인 정보를 제공하더라도 시스템은 단순히 편지를 통과시키지 않습니다. 우선, 그녀는 추가 지침에 대해 필요한 모든 정보가 포함된 편지를 보낼 것입니다.

그렇지 않으면 Google의 경우에도 동일한 방식으로 구성됩니다. 모든 데이터만 변경됩니다.

다른 SMTP를 통해 메일 전송을 구성하려면 모든 데이터가 거의 동일합니다.

모든 것이 잘 진행되고 편지가 지정된 수취인에게 도달하면 모든 것이 올바르게 완료된 것입니다. 댓글로 경험을 공유해 주시면 좋을 것 같습니다.

메일 PHP

이 기능은 기본적으로 이메일 전송으로 구현됩니다. 이 기능을 사용하려면 이메일을 전달하기 위해 타사 서버가 필요하지 않습니다. 이 기능의 정확성을 확인하려면 사이트가 있는 폴더에 test.php 파일을 만들고 거기에 다음 코드를 배치하세요.

대신 어디에 "이메일받는 사람" 편지를 보낼 이메일을 입력하세요.

장소 이 파일귀하의 사이트 루트에.

그런 다음 주소 표시줄에 www.YourDomain/test.php를 입력합니다. 지정된 이메일 주소로 편지를 받으면 호스팅이 편지 보내기 기능과 함께 올바르게 작동하는 것입니다. 메일 PHP". 편지가 스팸으로 분류될 가능성도 있으므로 확인이 필요합니다.

편지가 이해할 수 없는 인코딩으로 도착한 경우 다음 줄을 변경하십시오. "메일 발송 확인중입니다"~에 "메일 전송 확인 중", "Content-type:text/html;charset=utf-8".

그리고 브라우저의 주소 표시줄을 통해 편지를 반복해서 보냅니다.

위의 조작 후에도 테스트 편지가 최종 수신자에게 전달되지 않으면 호스팅 기술 지원에 문의해야 합니다.

단점 중에는 이 방법작업이 영구적이지 않다는 점은 주목할 가치가 있습니다. 이 방법. 호스팅 측에서 이메일 전송이 중단될 수 있습니다.

이 방법의 가장 큰 단점은 고객의 이메일로 전송된 모든 편지가 귀하의 웹사이트에서 직접 전송되었기 때문에 메일 서비스(gmail, mail.ru, yandex.ru)에서 인식되지 않는다는 것입니다.

Gmail 메일 서비스에는 "Gmail 시스템에서 이 편지가 YourDomain 도메인에서 전송되었는지 확인할 수 없습니다. 스팸일 수 있습니다."라는 문자와 함께 물음표와 서명이 함께 표시됩니다.

이런 상황을 방지하려면 .

SMTP(간단한 메일 전송 프로토콜)

SMTP - 메일 전송 프로토콜입니다. 전체적으로 이 프로토콜을 사용하여 메일 전송을 설정하려면 SMTP 서버 자체가 필요합니다. 회사(도메인) 메일 yandex.ru를 SMTP 서버로 사용하는 가장 일반적인 옵션은 https://pdd.yandex.ru/입니다.

우선 꼭 필요한 계정(메일) yandex, 귀하의 도메인에 대해 생성되는 이메일을 기준으로: "order@YourDomain" "info@YourDomain"... 기본 계정은 어디에도 표시되지 않으며 향후 이를 기반으로 도메인 이메일을 생성하는 데에만 사용됩니다.

개인 Yandex 계정에서 인증을 받은 후 https://pdd.yandex.ru/ 링크에 도메인 메일이 생성됩니다. 이는 사용자에게 "발신자" 필드에 표시되는 도메인 이메일입니다.

SMTP를 통해 이메일을 보낼 때 "보내는 사람" 필드가 필요합니다. SMTP를 사용하여 편지를 보내는 경우 " 도메인" - "이메일", 그에 따라 문자는 메일 서비스에서 인식됩니다.


이 방법의 단점 중 하나는 메일 서비스 자체가 아직 이 기능을 제공하지 않기 때문에 도메인 메일 초상화를 "로드"할 수 없다는 점에 주목할 가치가 있습니다.

SMTP를 통해 메일을 보내기 위한 설정

웹사이트 빌더가 Joomla CMS를 사용하는 웹사이트 이메일에 문제가 있는 경우가 있습니다. 예를 들어, 양식을 통해 편지를 보낼 때 피드백다음과 같은 유형의 오류가 나타날 수 있습니다. "메일 기능을 인스턴스화할 수 없습니다"또는 "메일 기능 호출에 실패했습니다.". 오류 없이 편지를 보내는 것도 가능하지만 결과적으로 여전히 수취인에게 도달하지 않습니다.

메일에서 이러한 문제가 발생하는 이유는 무엇입니까? 이 질문에 대답하려면 제어판에서 "시스템" - "일반 설정" - "서버" 탭 - "메일 설정" 섹션 경로로 이동해야 합니다.

CMS Joomla는 PHP Mail, Sendmail 및 SMTP의 세 가지 편지 전송 메커니즘을 제공합니다. 기본적으로 PHP 메일이 사용되는데, 이는 주로 사용된 호스팅 설정과 관련된 문제를 일으키는 경우가 많습니다.

위의 내용을 바탕으로 우리는 호스팅 공급자에게 도움을 요청하거나 Sendmail 또는 SMTP 방법을 사용하여 편지를 보내는 결론을 내립니다. SMTP 사용에 중점을 두겠습니다.

SMTP를 사용하여 메일을 보내기 위한 설정

SMTP(Simple Mail Transfer Protocol)는 이메일을 전송하는 데 사용되는 네트워크 프로토콜입니다. SMTP를 사용하려면 사용할 특정 메일 서버의 설정을 올바르게 구성해야 합니다.

보려면 SMTP 설정의 경우, "보내는 방법"에서 "SMTP"를 선택해야 합니다. 널리 사용되는 메일 서버인 Yandex, Mail, Gmail, Rambler 및 Yahoo의 각 설정을 살펴보겠습니다.

Yandex에 대한 SMTP 설정

  1. 웹사이트 이메일: yandex.ru의 사서함, 예: [이메일 보호됨]
  2. SMTP 보안: SSL
  3. SMTP 서버 포트: 465
  4. SMTP 사용자 이름: yandex.ru의 사서함 로그인, 예: khasanov(@yandex.ru 없음)
  5. SMTP 서버: smtp.yandex.ru

메일에 대한 SMTP 설정

  1. 웹사이트 이메일: mail.ru의 사서함, 예: [이메일 보호됨]
  2. 편지 보낸 사람: "보낸 사람" 필드에 받는 사람이 표시할 항목입니다.
  3. 메일링 비활성화: 켜기/끄기. 대량 메일 발송 기능
  4. SMTP 서버에 대한 인증: 예
  5. SMTP 보안: SSL
  6. SMTP 서버 포트: 465
  7. SMTP 사용자 이름: mail.ru의 사서함, 예: [이메일 보호됨]
  8. SMTP 비밀번호: 메일함 비밀번호
  9. SMTP 서버: smtp.mail.ru

Gmail의 SMTP 설정

  1. 웹사이트 이메일: gmail.com의 편지함, 예: [이메일 보호됨]
  2. 편지 보낸 사람: "보낸 사람" 필드에 받는 사람이 표시할 항목입니다.
  3. 메일링 비활성화: 켜기/끄기. 대량 메일 발송 기능
  4. SMTP 서버에 대한 인증: 예
  5. SMTP 보안: SSL
  6. SMTP 서버 포트: 465
  7. SMTP 사용자 이름: gmail.com 사서함, 예: [이메일 보호됨]
  8. SMTP 비밀번호: 메일함 비밀번호
  9. SMTP 서버: smtp.gmail.com

Rambler의 SMTP 설정

  1. 웹사이트 이메일: rambler.ru의 사서함, 예: [이메일 보호됨]
  2. 편지 보낸 사람: "보낸 사람" 필드에 받는 사람이 표시할 항목입니다.

PHPMailer는 귀하의 웹사이트에서 이메일 메시지를 보내는 데 매우 편리하고 널리 사용되는 라이브러리입니다. 이 문서에서는 라이브러리의 기본 설정을 설명하고 메시지 전송을 위한 코드 예제를 제공합니다. PHPMailer에는 메일 작업에 필요한 모든 기능이 포함되어 있습니다. 다른 방법으로, 다음을 포함한 다양한 서버를 통해 smtp를 통해 편지를 암호화하고 서명하여 스팸으로 분류되지 않도록 하는 기능 등이 있습니다.

https://github.com/PHPMailer/PHPMailer("복제 또는 다운로드" 버튼)에서 PHPMailer 라이브러리를 다운로드할 수 있습니다.

먼저 몇 가지를 살펴보겠습니다. 간단한 예 PHPMailer를 사용하여 이메일을 보내는 방법을 명확하게 합니다.

PHPMailer를 사용하여 mail() 함수를 통해 이메일 보내기

호스팅에서 이메일을 보내려면 메일 서버, 모든 것이 매우 간단하며 다음과 같이 보일 것입니다.

// PHPMailer 라이브러리를 포함합니다. PHPMailer\PHPMailer\PHPMailer를 사용합니다. "PHPMailer/PHPMailer.php"가 필요합니다. // 편지 만들기 $mail = new PHPMailer(); $mail->setFrom(" [이메일 보호됨]", "Ivan Ivanov"); // 보낸 사람 (이메일 및 이름) $mail->addAddress(" [이메일 보호됨]", "Vasya Petrov"); // 받는 사람 (이메일 및 이름) $mail->Subject = "Test"; // 편지 제목 // HTML 텍스트편지 $mail->msgHTML("

안녕하세요!

이것은 테스트 편지입니다.

"); // 보내기 if ($mail->send()) ( echo "메시지가 전송되었습니다!"; ) else ( echo "오류: " . $mail->ErrorInfo; )

보시다시피 모든 것이 매우 간단합니다. 도서관을 연결하고 누구에게, 누구에게 편지의 제목과 텍스트를 입력하여 보냅니다. 이 방법으로 이메일을 보내는 것은 도메인의 이메일 주소에서만 작동합니다(다른 메일러에 연결되지 않은 경우).

Yandex 및 Google의 예를 사용하여 PHPMailer를 사용하여 SMTP를 통해 이메일 보내기

예를 들어 다음과 같은 다른 우편물을 통해 편지를 보낼 수도 있습니다. 얀덱스. 코드는 다음과 같습니다.

// PHPMailer 라이브러리를 포함합니다. PHPMailer\PHPMailer\PHPMailer를 사용합니다. PHPMailer\PHPMailer\SMTP를 사용하십시오. "PHPMailer/PHPMailer.php"가 필요합니다. "PHPMailer/SMTP.php"가 필요합니다. // 편지 만들기 $mail = new PHPMailer(); $mail->isSMTP(); // SMTP를 통해 보내기 $mail->Host = "smtp.yandex.ru"; // SMTP 서버 주소 $mail->SMTPAuth = true; // SMTP 인증 활성화 $mail->Username = "login"; // 사용자 이름(도메인 및 @ 제외) $mail->Password = "password"; // 비밀번호 $mail->SMTPSecure = "ssl"; // SSL 암호화 $mail->Port = 465; // 연결 포트 $mail->setFrom(" [이메일 보호됨]", "Ivan Ivanov"); // 보낸 사람 $mail->addAddress(" [이메일 보호됨]", "Vasya Petrov"); // $mail->Subject = "Test"; $mail->msgHTML("

안녕하세요!

이것은 테스트 편지입니다.

"); // 보내기 if ($mail->send()) ( echo "메시지가 전송되었습니다!"; ) else ( echo "오류: " . $mail->ErrorInfo; )

Google을 통해 이메일 보내기한 가지 주의사항이 있습니다. 구글 계정 신뢰할 수 없는 애플리케이션에 대한 액세스 허용. 이렇게 하려면 https://myaccount.google.com 계정으로 이동하여 보안으로 이동한 후 '계정에 액세스할 수 있는 신뢰할 수 없는 애플리케이션' 섹션으로 이동하여 '허용됨'으로 전환해야 합니다. 글을 쓰는 시점에서 이 페이지는 https://myaccount.google.com/u/0/lesssecureapps입니다.

$mail->호스트 = "smtp.gmail.com"; // SMTP 서버 주소 $mail->SMTPAuth = true; // SMTP 인증 활성화 $mail->Username = "login"; // 사용자 이름 $mail->Password = "password"; // 비밀번호 $mail->SMTPSecure = "ssl"; // SSL 암호화 $mail->Port = 465; // 연결 포트

처음으로 smtp로 보내기 프로그램을 실행하는 경우 보내기 전에 추가로 사용하는 것이 좋습니다. $mail->SMTPDebug = 1;클라이언트와 smtp 서버로부터 모든 메시지를 수신합니다. 즉, 연결, 인증 등의 전체 과정이 화면에 표시되므로 프로그램 디버깅에 매우 유용합니다.

PHPMailer를 사용하여 첨부 파일이 포함된 이메일 보내기

여기에서는 모든 것이 매우 간단합니다. 방법을 사용하면됩니다. 첨부파일 추가. 예를 들면서 동시에 몇 가지를 더 보여 드리겠습니다. 추가 기능:

// PHPMailer 라이브러리를 포함합니다. PHPMailer\PHPMailer\PHPMailer를 사용합니다. PHPMailer\PHPMailer\Exception을 사용하십시오. "PHPMailer/PHPMailer.php"가 필요합니다. "PHPMailer/Exception.php"가 필요합니다. // 편지 만들기 $mail = new PHPMailer; $mail->CharSet = "UTF-8"; $mail->setFrom(" [이메일 보호됨]", "Ivan Ivanov"); // 보낸 사람 $mail->addReplyTo(" [이메일 보호됨]", "Ivan Ivanov"); // 반환 주소 $mail->addAddress(" [이메일 보호됨]", "Vasya Petrov"); // 받는 사람 $mail->Subject = "Test"; // 제목 $mail->msgHTML(file_get_contents("contents.html"), __DIR__); // "body" 가져오기 파일의 문자 $mail->AltBody = "Plain text letter"; // 클라이언트가 html을 지원하지 않는 경우 일반 텍스트 문자 $mail->addAttachment("my_file.txt") // 하나의 파일 첨부 $mail- >addAttachment("phpmailer) .jpg"); // 두 번째 파일 첨부 // Send if ($mail->send()) ( echo "Message sent!"; ) else ( echo "Error: " . $mail- >오류정보 )

addAddress를 사용하여 여러 수신자 주소를 추가할 수 있습니다. 또는 필요한 경우 다음 방법을 사용하여 모든 수신자 주소를 지울 수도 있습니다. 클리어주소(). 다음을 사용하여 모든 첨부 파일을 지울 수 있습니다. 클리어어태치먼트().

당신은 또한 사용할 수 있습니다 내장된 이미지 추가이메일에 첨부 파일(일반적으로 이미지)을 추가하려면 HTML 코드에 사용하기 위한 것이며 다운로드할 수 없습니다. 다운로드할 수 없는 편지에 그림을 사용하는 예:

// PHPMailer 라이브러리를 포함합니다. PHPMailer\PHPMailer\PHPMailer를 사용합니다. "PHPMailer/PHPMailer.php"가 필요합니다. //편지 만들기 $mail = new PHPMailer; $mail->IsHTML(true); $mail->setFrom(" [이메일 보호됨]", "이반 이바노프"); $mail->addAddress(" [이메일 보호됨]", "Vasya Petrov"); $mail->Subject = "Test"; $mail->AddEmbeddedImage("phpmailer.jpg","testImage"); $mail->Body = "

HTML 코드의 이미지

"; // $mail 보내기->send();

그래서 보낼 수 있습니다 이미지가 있는 편지, 편지 본문에만 있고 첨부 파일로 다운로드 할 수 없습니다. 이러한 이미지는 편지의 HTML 코드 어디에서나 사용할 수 있으며, URL 주소 대신 AddEmbeddedImage에서 사용한 이미지 cid를 지정하기만 하면 됩니다.

PHPMailer를 통해 서명되고 암호화된 이메일 보내기

기본적으로 PHPMailer는 보낸 모든 메시지를 암호화합니다. 다음 코드를 사용하여 SMTP를 통해 이메일을 보낼 때만 이메일 암호화를 비활성화할 수 있습니다.

$mail->SMTPSecure = 거짓; $mail->SMTPAutoTLS = 거짓;

에게 DKIM 서명으로 편지에 서명하세요, 여러 단계를 수행해야 합니다.

  • 도메인에 대한 개인 및 공개 키 생성
  • 공개 키를 사용하여 TXT 도메인에 대한 DNS 레코드 추가
  • 이메일을 보내기 전에 PHPMailer에서 DKIM 서명을 구성하세요.

이제 각 단계에 대해 좀 더 자세히 설명하겠습니다.

개인 및 공개 키 생성

Linux 호스팅이 있고 Shell에 액세스할 수 있는 경우 키 파일을 생성하는 것은 일반 사용자 권한으로 2개의 명령만 실행하면 됩니다.

Openssl genrsa -out test-private.pem 1024 openssl rsa -in test-private.pem -out test-public.pem -pubout

각기, 테스트-private.pem그리고 test-public.pem- 개인 키와 공개 키입니다. 사이트 방문자나 귀하를 제외한 다른 사람이 접근할 수 없는 폴더에 저장해야 합니다.

셸에서 명령을 실행할 수 없는 경우 개인 및 공개 키를 생성하여 파일에 저장하려면 다음 코드를 사용할 수 있습니다.

$domain = "test.ru"; // 귀하의 도메인 $privatekeyfile = "test-private.pem"; // 개인키가 기록될 파일명 $publickeyfile = "test-public.pem"; // 공개 키가 기록될 파일 이름 if (file_exists($privatekeyfile)) ( echo "

기존 키 사용

"; $privatekey = file_get_contents($privatekeyfile); $publickey = file_get_contents($publickeyfile); ) else ( echo "

키 생성"; $pk = openssl_pkey_new([ "digest_alg" => "sha256", "private_key_bits" => 2048, "private_key_type" => OPENSSL_KEYTYPE_RSA, ]); openssl_pkey_export_to_file($pk, $privatekeyfile); $pubKey = openssl_pkey_get_details($pk ); $publickey = $pubKey["key"]; file_put_contents($publickeyfile, $publickey);

개인 키(비공개로 유지하세요!):

" . $privatekey . "
"; 에코 "

공개 키:

" . $공개키 ."
";

주목!파일이 저장될 폴더에 쓰기 가능한지 확인하는 것을 잊지 마세요.

공개 키를 사용하여 DNS 레코드 추가

편지를 받을 메일 서버가 도메인의 DNS 레코드를 읽어 편지의 서명을 확인할 수 있도록 하려면 DNS 레코드가 필요합니다. 일반적으로 도메인 제어판이나 호스팅 제어판에서 DNS 레코드를 추가할 수 있습니다. 항목을 추가하는 방법을 모르는 경우 호스팅 공급자의 지원에 문의하세요.

다음과 같이 DNS 레코드를 추가해야 합니다.

항목 이름: mail._domainkey.test.ru. (마지막에 점 "."이 있습니다)

TTL: 3600 (또는 기본값이 될 것임)

게시물 유형: TXT

의미: v=DKIM1; h=sha256; t=s; p=YOUR_PUBLIC_KEY

항목 이름에 test.ru도메인 이름으로 바꿔야 합니다. "YOUR_PUBLIC_KEY"라는 단어를 "-----BEGIN PUBLIC KEY-----" 및 "------END PUBLIC KEY- 없이 "공개 키" 다음 이전 단계에서 받은 텍스트로 바꿉니다. -- --", 키 자체만 해당됩니다. 이 경우 모든 키 라인이 필요합니다 하나의 긴 줄로 연결줄 바꿈이 없도록 합니다.

PHPMailer에서 DKIM 서명 설정 및 이메일 보내기

이제 남은 것은 편지를 보내기 전에 몇 가지 PHPMailer 설정을 지정하는 것뿐입니다. 그러면 편지가 서명됩니다. 다음 예를 보면 모든 것이 명확해질 것이라고 생각합니다.

// 라이브러리를 포함합니다. PHPMailer\PHPMailer\PHPMailer를 사용합니다. "PHPMailer/PHPMailer.php"가 필요합니다. // 편지 만들기 $mail = new PHPMailer; $mail->CharSet = "UTF-8"; $mail->setFrom(" [이메일 보호됨]"); $mail->addAddress(" [이메일 보호됨]"); $mail->Subject = "테스트입니다"; $mail->msgHTML("

이것은 테스트입니다

"); // DKIM 서명 설정 $mail->DKIM_domain = "test.ru"; $mail->DKIM_private = "test-private.pem"; $mail->DKIM_selector = "mail"; // $ 보내기 메일->send();

물론 test.ru도메인 이름으로 변경해야 하며, 테스트-private.pem키 생성 단계에서 생성된 개인 키 파일의 전체 경로와 이름입니다.

이제 PHPMailer를 통해 전송된 이메일은 개인 키로 DKIM 서명됩니다.

2019-08-05

안녕하세요, 방문객 여러분!

블로그 업데이트가 늦어진 점 양해 부탁드립니다. 그러나 이에 대한 완전히 이해 가능한 설명이 있습니다. 결국 여름, 다차, 손님, 숲, 물 등으로 인해 웹 사이트를 만드는 문제를 해결할 수 없었습니다. 그런데 이제 좀 여유가 생겼고, 손님들도 떠났고, 이제는 확실히 이것에 주의를 기울일 수 있을 것 같아요.

따라서 지난 기사에서 우리 도메인의 메일을 메일 서비스 중 하나에 연결한 후 이제 사이트에서 이메일을 보내는 방법을 살펴보겠습니다. 더욱이, 우리의 편지가 SPAM으로 끝나지 않고 높은 확률로 수신자에게 안정적으로 전달되는 방식으로 말입니다.

일반적으로 PHP에는 편지를 보내는 mail() 함수가 내장되어 있습니다. 그러나 이 방법의 단순성에도 불구하고(이 경우 문자를 보내려면 특정 매개 변수를 사용하여 한 줄의 코드만 지정하면 충분함) 이 옵션을 사용하면 SPAM 문제와 관련된 심각한 단점이 있습니다. .

사실 수신자 측 메일 서버의 스팸 방지 필터는 실제로 mail() 기능을 통해 전송된 편지를 선호하지 않습니다. 그리고 대부분의 경우 이러한 메시지는 수취인에게 도달하기 전에 필터링되거나 삭제되기도 합니다.

그리고 이러한 경우를 최대한 없애기 위해 일반적으로 타사 메일 서비스에서 보낸 것처럼 편지를 보내는 또 다른 옵션이 사용됩니다.

이 방법을 인증을 통해 SMTP를 통해 메일을 보내는 것입니다. 오늘은 피드백 양식을 보내는 예를 사용하여 살펴보겠습니다. 또한 이를 위해 SMTP를 통해 보내는 편지를 매우 간단하게 구성할 수 있는 꽤 유명하고 인기 있는 PHPMailer 라이브러리를 사용할 것입니다.

  • 피드백 편지를 보내는 방법
  • 피드백 양식 만들기
  • PHPMailer 라이브러리 설치
  • SMTP를 통해 메일을 보내기 위한 스크립트를 만듭니다.
  • 이메일 발송 확인 중
  • 소스 파일대지

피드백 편지를 보내는 방법

시작하기 전에 실무피드백 편지를 보낸 후 먼저 어떻게 할지 결정하겠습니다.

피드백 양식은 사용자가 사이트 관리자와 소통하여 메시지를 전달할 수 있도록 설계되었습니다. 일반적으로 이 양식은 여러 필드와 "제출" 버튼으로 구성됩니다.

원칙적으로 이메일을 보내려면 다음과 같이 사용자 및 메시지 내용에 대한 충분한 정보를 제공하는 몇 가지 필드만 사용하면 충분합니다.

  • "이름" - 메시지 보낸 사람의 이름을 입력합니다.
  • "이메일" - 보낸 사람의 이메일 주소입니다.
  • "메시지 제목";
  • "메시지 텍스트".

다른 사람을 추가할 수도 있지만. 예를 들어 전화번호(정말 필요한 경우)입니다.

우리의 경우 이러한 편지는 도메인이 연결된 메일 서비스에 대한 승인을 받아 실제 사서함에서 사이트 관리자의 주소로 전송됩니다.

이전 기사에서는 도메인 메일과 Yandex.Mail 서비스의 연결을 확인하는 데 중점을 두었으므로 이 옵션에 대한 메일을 보내겠습니다. 이것은 중요하지 않지만. 아래에는 변경 시 Mail.ru 메일 서버를 통해 이메일을 보낼 수 있는 옵션이 표시됩니다.

편지가 전송되는 실제 사서함으로 새로 생성된 도메인 메일 사용자의 계정을 주소와 함께 사용합니다. [이메일 보호됨]. 그리고 우리는 이 편지들을 관리자의 사서함으로 보낼 것입니다 [이메일 보호됨], 이전 기사에서 이전에 만든 것입니다.

따라서 피드백 양식의 편지를 보낸 사람이 사서함이 됩니다. [이메일 보호됨]., 그리고 수신자 - [이메일 보호됨]. 이 경우, 메시지를 보낸 사용자에 대한 모든 정보와 그 내용이 보낸 편지의 본문에 포함되어 전송됩니다.

피드백 양식 만들기

편지 발송 절차를 결정한 후에는 이를 수행할 피드백 양식을 작성하겠습니다.

다음은 "연락처" 페이지(기사 디렉토리의 kontakty.php 파일)에 배치할 이 양식의 HTML 코드입니다.

    "기사" >

    콘택트 렌즈

    피드백

    "연락하다"행동 = "#" 방법 = "우편" >

    피드백 양식

    모든 질문, 요청 및 사업 제안에 대해서는 아래 피드백 양식을 사용하여 문의하실 수 있습니다.

    "접촉 블록" >

    "연락처 입력" >

    "텍스트"아이디 = "연락처 이름"이름 = "연락처 이름"제목 = "이름은 러시아어로 되어 있어야 하며 3자 이상이어야 합니다." 패턴 = "{3,}" 필수 >

  1. "빈 접촉" >

    "연락처 입력" >

    "이메일"아이디 = "연락처 이메일"이름 = "연락처 이메일"필수 >

  2. "연락처 제목" >

  3. "연락처-댓글" >

  4. "연락처 버튼" >

    "제출하다"이름 = "연락처 버튼"값 = "보내다" >

Fig.1 피드백 양식의 HTML 코드

여기에 표시된 피드백 양식이 다음 스크린샷에서 최종적으로 어떻게 보이는지 확인할 수 있습니다.

따라서 원하는 형태가 생성됩니다. 이제 이메일 메시지 형식으로 데이터를 처리하고 전송하는 문제로 넘어갈 수 있습니다.

PHPMailer 라이브러리 설치

이전에 언급한 것처럼 메일을 보내기 위해 PHPMailer 라이브러리를 사용합니다. 이는 PHPMailer 라이브러리를 통해 이메일 보내기를 크게 단순화합니다. SMTP 프로토콜제3자 메일 서비스에 대한 승인을 받아.

설치하려면 다운로드가 필요합니다 필요한 파일. 이는 Composer(PHP용 패키지 종속성 관리자)를 사용하여 GitHub 웹 서비스에서 수행할 수 있습니다. 아니면 일반적인 방법으로 필요한 파일을 다운로드하면 됩니다.

스크린샷 73

아래는 PHPMailer 라이브러리의 일반 다운로드 링크가 표시된 GitHub 웹 서비스 페이지입니다.

이 외에도 최신 버전본 글 작성 당시 저장되어 있던 6.0.7은 첨부된 자료에서 다운로드 받으실 수 있습니다.

어떤 경우든 결과 아카이브 파일의 압축을 풀어야 하며, 그 후에 추출된 모든 내용이 포함된 PHPMailer-master 폴더를 사이트 루트에 배치해야 합니다. 동시에 단순화를 위해 이름을 PHPMailer로 바꿀 수 있습니다. 아래는 사이트의 루트 디렉터리에 있는 PHPMailer 폴더의 내용입니다.

따라서 우리는 PHPMailer 라이브러리를 설치했습니다. 그런 다음 웹사이트에서 이메일 메시지를 보내는 데 사용할 스크립트 작성을 시작할 수 있습니다.

SMTP를 통해 메일을 보내기 위한 스크립트를 만듭니다.

스크립트를 작성하려면 이전에 라이브러리를 다운로드하는 데 사용했던 GitHub 페이지에 제공된 PHPMailer 사용에 대한 권장 사항을 사용하면 충분합니다.

특히 스크립트 시작 부분에서 PHPMailer 클래스를 전역 네임스페이스로 가져와야 함을 나타냅니다. 그리고 해당 코드의 특정 줄이 제공됩니다. SMTP를 통해 메일을 보내는 옵션을 포함하여 PHPMailer의 속성과 메서드를 사용하는 예도 있습니다.

하지만 이것이 충분하지 않다면 이 라이브러리의 모든 속성과 메서드에 대한 설명이 포함된 설명서를 사용할 수도 있습니다.

스크린샷 74

아래는 승인을 받아 SMTP를 통해 피드백 양식의 메일을 보내기 위한 스크립트 코드입니다. PHPMailer와 관련된 모든 라인에 대한 설명이 제공되고 밝은 배경으로 강조 표시됩니다.

이전에 다른 프로세서에서 사용해야 했던 양식의 데이터 수신 및 처리와 관련된 조각을 포함한 나머지 부분은 어두운 배경으로 표시됩니다. 이는 PHP의 양식에서 데이터를 얻고 확인하는 문제를 구체적으로 다룬 기사의 앞부분에서 자세히 논의되었습니다. 양식 데이터의 유효성을 검사하고 처리하기 위한 범용 사용자 기능에 대해서도 이야기했습니다. check_symbol().

이 스크립트를 이전에 피드백 양식을 생성했던 것과 동일한 kontakty.php 파일에 배치하겠습니다.

    //----PHPMailer를 사용하여 SMTP를 통해 메일을 보내는 스크립트----

    //PHPMailer 클래스를 전역 네임스페이스로 가져옵니다. 함수 내부가 아닌 스크립트 상단에 있어야 합니다.

    사용 PHPMailer\PHPMailer\PHPMailer ;

    사용 PHPMailer\PHPMailer\Exception ;

    만약에 (!비어 있는($_POST["연락처 버튼" ])) (

    $name = $_POST["연락처 이름" ];

    $name = check_symbol ($name, "이름" , "1" , "/^+\z/iu" );

    $email = $_POST["연락처-이메일" ];

    $email = check_symbol ($email, "이메일" , "1" , "/^+@(+\.)+(2,6)\z/i");

    $subject = $_POST["연락처-제목" ];

    $subject = check_symbol ($subject, "메시지 제목" , "1" , "0" );

    $comment = $_POST["연락처-댓글" ];

    $comment = check_symbol($comment, "메시지 텍스트", "1" , "0" );

    만약에 (!비어 있는($GLOBALS["경고" ])) (

    $경고 = "양식 데이터가 전송되지 않았습니다. 다음 오류가 발견되었습니다:\n".$경고;

    포함하다"경고.php" ;

    또 다른 {

    //라이브러리 연결

    필요하다"PHPMailer/src/PHPMailer.php" ;

    필요하다"PHPMailer/src/Exception.php" ;

    필요하다"PHPMailer/src/SMTP.php" ;

    $메일 = 새로운 PHP메일러(); //클래스 초기화

    $에서 = " [이메일 보호됨]" ; //편지를 보낸 이메일 주소

    $에 = " [이메일 보호됨]" ; //받는 사람의 주소

    $mail -> isSMTP(); //SMTP 프로토콜 사용

    $mail -> 호스트 = "smtp.yandex.ru" ; //메일서버 주소

    $mail -> SMTPAuth = 진실 ; //인증 모드 활성화

    $mail -> 사용자 이름 = " [이메일 보호됨]" ; //타사 이메일 서비스(이 경우 Yandex.Mail)에 연결된 도메인 이메일에서 로그인

    $mail -> 비밀번호 = "27MrDon89" ; //도메인 메일 비밀번호

    $mail -> SMTPSecure = "ssl" ; //암호화 프로토콜

    $mail -> 포트 = "465" ; //SMTP 서버 포트

    $mail -> CharSet = "UTF-8" ; //부호화

    $mail -> setFrom ($from, "관리자" ); //보내는 사람의 주소와 이름

    $mail -> addAddress ($to, "관리자" ); //받는 사람의 주소와 이름

    $mail -> isHTML( 진실 ); //이메일 형식을 HTML로 설정

    $mail -> 제목 = '의견 양식이 제출되었습니다.'; //이메일 제목(heading)

    $mail -> 본문 = "

    보낸 사람 이름: $name

    보내는 사람의 주소: $이메일

    메시지 제목: $주제

    메시지 내용: $댓글

    " ; //메시지 내용

    $mail -> AltBody = "대체 문자 텍스트"; //이메일 클라이언트가 HTML 형식을 지원하지 않는 경우 대체 이메일

    $mail -> SMTPDebug = 0 ; //SMTP 디버깅 활성화: 0 - 꺼짐(일반 사용의 경우), 1 = 클라이언트 메시지, 2 - 클라이언트 및 서버 메시지

    만약에($mail -> 보내기()) (

    $경고 = "메시지가 전송되었습니다"; //성공적인 편지 전송에 대한 메시지를 브라우저 대화 상자에 출력합니다.

    또 다른 {

    $경고 = "오류, 이메일을 보낼 수 없습니다: ".$mail -> 오류정보 ; //오류 메시지 출력

    포함하다"경고.php" ;

그림 5 인증을 통해 SMTP를 통해 이메일을 보내는 스크립트

보시다시피 필요한 방법과 속성이 지정된 전자 메일 메시지 보내기와 직접 관련된 모든 줄에는 주석이 함께 제공됩니다. 따라서 반복하는 것은 의미가 없지만 실제로 추가 설명이 필요한 일부에만 머물 수 있습니다. 즉:

1. 편지가 타사 메일 서비스에서 전송된다는 사실로 인해 특정 SMTP 서버에 해당하는 설정이 여기에 적용됩니다. 이 경우 Yandex.Mail 서버의 사용 사례에는 다음 속성 값이 적용됩니다.

  • 재산 주인(pos.28) - 값이 smtp.yandex.ru인 메일 서버 주소;
  • 재산 SMTP보안
  • 재산 포트

이러한 속성 값은 다음 스크린샷에 표시된 Yandex.Help 페이지에서 가져왔습니다.

그러나 그러한 정보는 다른 리소스에서도 얻을 수 있습니다. 이렇게 하려면 검색 엔진에 "Yandex smtp 서버"와 같은 적절한 쿼리를 입력하기만 하면 됩니다. 이 문제에 대한 많은 참고 자료를 어디에서 찾을 수 있습니까?

비슷한 방법으로 다른 SMTP 서버에서도 설정 값을 얻을 수 있습니다. 다음은 Mail.ru 메일 서비스의 SMTP 서버 설정을 표시하는 Mail.ru 도움말 페이지의 스크린샷입니다.

따라서 Mail.ru를 타사 SMTP 서버로 사용하는 경우 PHPMailer 클래스 속성의 다음 값을 적용해야 합니다.

  • 재산 주인(pos.28) - 메일 서버 주소 (smtp.mail.ru);
  • 재산 SMTP보안(pos.32) - 암호화 프로토콜(ssl);
  • 재산 포트(위치 33) - SMTP 서버 포트(465).

다른 이메일 서비스에도 유사한 접근 방식을 적용해야 합니다.

2. 부동산 내 사용자 이름(pos. 30) 도메인 메일함의 전체 주소를 표시해야 합니다. 이 경우 " [이메일 보호됨]".

다만, 편지발송을 위해 도메인 메일 계정이 아닌 계정을 사용하되, 메일 서비스와 직접적으로 관련된 주소를 사용하는 경우에는 " [이메일 보호됨]"인 경우 로그인은 "@" 기호까지의 주소 부분이어야 합니다. 이 경우 로그인의 값은 "feedback"입니다.

3. PHPMailer는 속성을 제공합니다 SMTP디버그(pos. 50), 브라우저 화면에 다양한 수준의 오류를 표시할 수 있습니다. 이 기능은 스크립트를 디버깅할 때 문제를 찾는 것을 크게 단순화합니다.

일반적으로 일반 모드에서는 값을 0으로 설정하면 자세한 오류 정보 출력이 비활성화됩니다. 그러나 메일 전송이나 디버깅 중에 문제가 발생하는 경우 다른 값을 사용하여 오류에 대한 보다 의미 있는 정보를 표시할 수 있습니다.

이것이 실제로 어떻게 보이는지 확인하기 위해 일시적으로 설정에 일부 오류를 도입해 보겠습니다. 예를 들어, 도메인 메일 비밀번호(속성 비밀번호, 31항). 또한 오류에 대한 자세한 정보를 표시하기 위해 속성에 임시로 설정됩니다. SMTP디버그(pos.50) 값 1. 모든 것이 디버깅되고 확인되면 SMTP 디버깅 모드를 비활성화하고 1을 0으로 바꿉니다.

스크립트의 마지막 부분에서는 필요한 모든 속성과 메서드를 지정한 후 해당 메서드를 사용하여 편지를 보냅니다. 보내다()) (위치 51). 그리고 편지를 보낸다면, 그리고 방법은 보내다()대상을 위해 $mail true를 반환한 다음 브라우저 대화 상자에서 변수를 통해 $경고메일 전송 성공에 대한 메시지가 표시됩니다(52번).

어떤 이유로 메일을 보낼 수 없고 그에 따라 메서드가 true를 반환할 수 없는 경우 이 상태에는 해당 오류 메시지가 표시됩니다(위치 55).

이메일 발송 확인 중

메일을 보내기 위한 스크립트를 만든 후에는 당연히 "창의성"의 결과를 살펴봐야 합니다. 여기에서 모든 것을 고려했는데 실수는 없었나요?

이를 위해 의도한 대로 피드백 양식에서 사용자가 사이트 관리자에게 메시지를 보내도록 시도해 보겠습니다. 다음은 제출 전 필드가 채워진 피드백 양식의 스크린샷입니다.

그리고 다음은 양식을 제출한 결과입니다.

브라우저 대화 상자의 메시지를 보면 SMTP 연결 문제로 인해 편지를 보낼 수 없다는 것이 분명합니다.

하지만 이제부터 부동산은 SMTP디버그(pos. 50)에 값 1이 할당되면 발생한 오류에 대한 자세한 정보를 볼 수 있고 오류 발생 이유를 알아낼 수 있습니다.

다음 스크린샷은 연결을 시도할 때 잘못된 로그인 또는 비밀번호 사용을 의미하는 인증 오류가 감지되었음을 보여줍니다.

비밀번호 불일치(이전에는 오류에 대한 추가 정보 출력을 확인하기 위해 잘못된 비밀번호를 사용했음)를 제거한 후 메일을 다시 보내도록 시도합니다.

이번에는 모든 일이 순조롭게 진행되는 것 같았고 메일이 성공적으로 전송되었다는 메시지를 받았습니다. 도메인 이메일 비밀번호에 고의로 일시적인 오류를 넣은 것 외에는 다른 실수는 하지 않은 것 같습니다.

하지만 편지가 실제로 수취인에게 전달되었는지 확인하기 위해 메일에 주소를 입력해 보겠습니다. [이메일 보호됨]그리고 결과를 보세요.

보시다시피 주소에서 온 편지입니다. [이메일 보호됨], "Feedback"이라는 이름의 이메일 메시지가 사이트 관리자에게 성공적으로 전달되었습니다. 동시에 편지 본문에는 피드백 양식에서 받은 데이터를 사용하여 스크립트에서 생성한 모든 내용이 포함됩니다.

  • 보낸 사람 이름: Nikolay;
  • 보내는 사람의 주소: [이메일 보호됨];
  • 메시지 제목: 메일 발송 확인 중;
  • 메시지 내용: 테스트 메시지입니다.

이제 메일 전송을 성공적으로 확인한 후 속성을 할당하여 SMTP 디버깅 모드를 비활성화할 수 있습니다. SMTP디버그(pos.50) 값 0.

따라서 우리는 타사 메일 서버를 사용하여 인증을 받아 SMTP를 통해 메일을 보내는 도구를 만드는 작업을 완료했습니다.

예를 들어, 다음 기사에서는 등록된 사용자 계정 데이터를 복구하기 위해 확인 이메일을 보내는 방법을 살펴보겠습니다.

사이트 소스 파일

이 기사에서 업데이트된 사이트의 소스 파일은 첨부된 추가 자료에서 다운로드할 수 있습니다.

  • www 디렉토리 파일
  • MySQL 데이터베이스 테이블

© 2024 ermake.ru - PC 수리 정보 - 정보 포털