수색…


매개 변수

매개 변수 세부
string $to 받는 사람 전자 메일 주소
string $subject 제목
string $message 전자 메일 본문
string $additional_headers 선택 사항 : 이메일에 추가 할 헤더
string $additional_parameters 옵션 : 명령 줄에서 구성된 메일 보내기 응용 프로그램에 전달할 인수

비고

전자 메일 스크립트를 통해 보내려는 메시지가 도착하지 않습니다. 어떻게해야합니까?

  • 오류보고가 켜져 있는지 확인하여 오류가 있는지 확인하십시오.

  • PHP의 오류 로그 파일에 액세스 할 수있는 경우 해당 파일을 확인하십시오.

  • 서버 에서 mail() 명령을 올바르게 구성 했습니까? 공유 호스팅을 사용중인 경우 여기에서 변경할 수 없습니다.

  • 전자 메일이 사라지면 스팸 폴더가있는 전자 메일 서비스를 사용하여 전자 메일 계정을 시작하십시오 (또는 스팸 필터링을 전혀 사용하지 않는 메일 계정을 사용하십시오). 이렇게하면 전자 메일이 발송되지 않거나 발송되지는 않지만 스팸으로 필터링되는지 여부를 알 수 있습니다.

  • 가능한 "보낸 사람에게 반송 된"메일에 사용한 "보낸 사람 :"주소를 확인 했습니까? 오류 메일에 대해 별도의 바운스 주소 를 설정할 수도 있습니다.

보내는 전자 메일이 스팸으로 필터링됩니다. 어떻게해야합니까?

  • 보낸 사람 주소 ( "보낸 사람")가 전자 메일을 보내는 서버에서 실행되는 도메인에 속합니까? 그렇지 않다면 변경하십시오.

    [email protected] 과 같은 발신자 주소는 절대로 사용하지 마십시오. reply-to 이 다른 주소로 도착해야하는 경우 reply-to 사용하십시오.

  • 서버가 차단 목록에 있습니까? 이것은 이웃 사람들이 나쁘게 행동 할 때 공유 호스팅을 할 때 가능합니다. Spamhaus 와 같은 대부분의 블랙리스트 제공 업체에는 서버의 IP를 조회 할 수있는 도구가 있습니다. MX Toolbox 와 같은 타사 도구도 있습니다 .

  • PHP를 설치하기 위해서는 mail ()에 다섯 번째 매개 변수 를 설정하여 보낸 사람 주소를 추가해야합니다. 이것이 귀하에게 해당되는지 확인하십시오.

  • 다른 모든 방법이 실패하면 Mailgun , SparkPost , Amazon SES , Mailjet , SendinBlue 또는 SendGrid 와 같은 전자 메일을 몇 가지 이름으로 사용하는 것이 좋습니다. 그들은 모두 PHP를 사용하여 호출 할 수있는 API를 가지고 있습니다.

이메일 보내기 - 기본 사항, 자세한 내용 및 전체 예제

일반적인 이메일에는 세 가지 주요 구성 요소가 있습니다.

  1. 받는 사람 (전자 메일 주소로 표시됨)
  2. 주제
  3. 메시지 본문

PHP로 메일을 보내는 것은 내장 함수 mail() 을 호출하는 것만 큼 간단합니다. mail() 은 최대 다섯 개의 매개 변수를 사용하지만 첫 번째 세 개는 전자 메일을 보내는 데 필요합니다 (아래에 설명 된 것처럼 일반적으로 네 개의 매개 변수가 사용되지만). 처음 세 매개 변수는 다음과 같습니다.

  1. 받는 사람의 전자 메일 주소 (문자열)
  2. 전자 메일의 제목 (문자열)
  3. 전자 메일의 본문 (문자열) (예 : 전자 메일의 내용)

최소한의 예는 다음 코드와 유사합니다.

mail('[email protected]', 'Email Subject', 'This is the email message body');

위의 간단한 예제는 내부 시스템에 대한 전자 메일 경고의 하드 코드와 같은 제한된 상황에서 잘 작동합니다. 그러나 mail() 에 대한 매개 변수로 전달 된 데이터를 변수에 넣으면 코드를보다 명확하고 쉽게 관리 할 수 ​​있습니다 (예 : 양식 제출에서 전자 메일을 동적으로 작성).

또한 mail() 은 이메일과 함께 추가 메일 헤더를 보낼 수있는 네 번째 매개 변수를 허용합니다. 이 헤더를 사용하면 다음을 설정할 수 있습니다.

  • 사용자가 볼 수있는 From 이름과 이메일 주소
  • 사용자의 응답이 전송 될 Reply-To 주소
  • X-Mailer 와 같은 추가 비표준 헤더는 수신자에게이 이메일이 PHP를 통해 전송 X-Mailer 알릴 수 있습니다.
$to      = '[email protected]';             // Could also be $to      = $_POST['recipient'];  
$subject = 'Email Subject';                     // Could also be $subject = $_POST['subject'];  
$message = 'This is the email message body';    // Could also be $message = $_POST['message'];  
$headers = implode("\r\n", [
    'From: John Conde <[email protected]>',
    'Reply-To: [email protected]',
    'X-Mailer: PHP/' . PHP_VERSION
]);

선택적인 다섯 번째 매개 변수는 sendmail_path 구성 설정에 정의 된대로 메일을 보낼 때 사용하도록 구성된 프로그램에 명령 행 옵션으로 추가 플래그를 전달하는 데 사용될 수 있습니다. 예를 들어 -f sendmail 옵션과 함께 sendmail / postfix를 사용할 때 봉투 송신자 주소를 설정하는 데 사용할 수 있습니다.

$fifth  = '[email protected]';

mail() 을 사용하는 것은 꽤 안정적 일 수 있지만, mail() 이 호출 될 때 이메일이 전송된다는 것은 결코 보장되지 않습니다. 전자 메일을 보낼 때 잠재적 인 오류가 있는지 확인하려면 mail() 에서 반환 값을 캡처해야합니다. 우편물이 배달을 위해 성공적으로 수락되면 TRUE 가 반환됩니다. 그렇지 않으면 FALSE 를 받게됩니다.

$result = mail($to, $subject, $message, $headers, $fifth);

참고 : mail()TRUE 반환 할 수 있지만 mail() 메일을 보내거나받는 사람이 전자 메일을 수신한다는 의미는 아닙니다 . 메일이 시스템의 메일 시스템으로 성공적으로 전달되었음을 나타냅니다.

HTML 전자 메일을 보내려면 수행해야 할 작업이 많지 않습니다. 당신은 다음을해야합니다 :

  1. MIME-Version 헤더 추가
  2. Content-Type 헤더 추가
  3. 이메일 내용이 HTML인지 확인하십시오.
$to      = '[email protected]';                            
$subject = 'Email Subject';                                     
$message = '<html><body>This is the email message body</body></html>';       
$headers = implode("\r\n", [
    'From: John Conde <[email protected]>',
    'Reply-To: [email protected]',
    'MIME-Version: 1.0',
    'Content-Type: text/html; charset=ISO-8859-1',
    'X-Mailer: PHP/' . PHP_VERSION
]);

다음은 PHP의 mail() 함수 사용에 대한 전체 예제입니다.

<?php

// Debugging tools. Only turn these on in your development environment.

error_reporting(-1);
ini_set('display_errors', 'On');
set_error_handler("var_dump");

// Special mail settings that can make mail less likely to be considered spam
// and offers logging in case of technical difficulties.

ini_set("mail.log", "/tmp/mail.log");
ini_set("mail.add_x_header", TRUE);

// The components of our email

$to      = '[email protected]';
$subject = 'Email Subject';
$message = 'This is the email message body';
$headers = implode("\r\n", [
    'From: [email protected]',
    'Reply-To: [email protected]',
    'X-Mailer: PHP/' . PHP_VERSION
]);

// Send the email

$result = mail($to, $subject, $message, $headers);

// Check the results and react accordingly

if ($result) {
  
    // Success! Redirect to a thank you page. Use the
    // POST/REDIRECT/GET pattern to prevent form resubmissions
    // when a user refreshes the page.
  
    header('Location: http://example.com/path/to/thank-you.php', true, 303);
    exit;
  
}
else {
  
    // Your mail was not sent. Check your logs to see if
    // the reason was reported there for you.
  
}

참고 사항

공식 문서

관련 스택 오버플로 질문

대체 메일러

이메일 서버

관련 주제

mail ()을 사용하여 HTML 전자 메일 보내기

<?php
$to      = '[email protected]';
$subject = 'Sending an HTML email using mail() in PHP';
$message = '<html><body><p><b>This paragraph is bold.</b></p><p><i>This text is italic.</i></p></body></html>';

$headers = implode("\r\n", [
    "From: John Conde <[email protected]>",
    "Reply-To: [email protected]",
    "X-Mailer: PHP/" . PHP_VERSION,
    "MIME-Version: 1.0",
    "Content-Type: text/html; charset=UTF-8"
]);

mail($to, $subject, $message, $headers);

이것은 평범한 텍스트 이메일보내는 것과 크게 다르지 않습니다. 콘텐츠 본문의 주요 차이점은 HTML 문서와 같은 구조이며 전자 메일 클라이언트가 전자 메일을 HTML로 변환 할 수 있도록 포함되어야하는 두 개의 추가 헤더가 있습니다. 그들은:

  • MIME 버전 : 1.0
  • Content-Type : text / html; charset = UTF-8

PHPMailer를 사용하여 일반 텍스트 이메일 보내기

기본 텍스트 이메일

<?php

$mail = new PHPMailer();

$mail->From     = "[email protected]";
$mail->FromName = "Full Name";
$mail->addReplyTo("[email protected]", "Reply Address");
$mail->Subject  = "Subject Text";
$mail->Body     = "This is a sample basic text email using PHPMailer.";

if($mail->send()) {
    // Success! Redirect to a thank you page. Use the
    // POST/REDIRECT/GET pattern to prevent form resubmissions
    // when a user refreshes the page.
  
    header('Location: http://example.com/path/to/thank-you.php', true, 303);
    exit;
} 
else {
    echo "Mailer Error: " . $mail->ErrorInfo;
}

추가 수신자, 참조 수신자, 숨은 참조 수신자 추가

<?php

$mail = new PHPMailer();

$mail->From     = "[email protected]";
$mail->FromName = "Full Name";
$mail->addReplyTo("[email protected]", "Reply Address");
$mail->addAddress("[email protected]", "Recepient Name");
$mail->addAddress("[email protected]"); 
$mail->addCC("[email protected]");
$mail->addBCC("[email protected]");
$mail->Subject  = "Subject Text";
$mail->Body     = "This is a sample basic text email using PHPMailer.";

if($mail->send()) {
    // Success! Redirect to a thank you page. Use the
    // POST/REDIRECT/GET pattern to prevent form resubmissions
    // when a user refreshes the page.
  
    header('Location: http://example.com/path/to/thank-you.php', true, 303);
    exit;
} 
else {
    echo "Error: " . $mail->ErrorInfo;
}   

mail ()을 사용하여 첨부 파일로 전자 메일 보내기

<?php

$to         = '[email protected]';
$subject    = 'Email Subject';
$message    = 'This is the email message body';

$attachment = '/path/to/your/file.pdf';
$content = file_get_contents($attachment);

/* Attachment content transferred in Base64 encoding
MUST be split into chunks 76 characters in length as
specified by RFC 2045 section 6.8. By default, the
function chunk_split() uses a chunk length of 76 with
a trailing CRLF (\r\n). The 76 character requirement
does not include the carriage return and line feed */
$content = chunk_split(base64_encode($content));

/* Boundaries delimit multipart entities. As stated
in RFC 2046 section 5.1, the boundary MUST NOT occur
in any encapsulated part. Therefore, it should be
unique. As stated in the following section 5.1.1, a
boundary is defined as a line consisting of two hyphens
("--"), a parameter value, optional linear whitespace,
and a terminating CRLF. */
$prefix     = "part_"; // This is an optional prefix
/* Generate a unique boundary parameter value with our
prefix using the uniqid() function. The second parameter
makes the parameter value more unique. */
$boundary   = uniqid($prefix, true);

// headers
$headers    = implode("\r\n", [
    'From: [email protected]',
    'Reply-To: [email protected]',
    'X-Mailer: PHP/' . PHP_VERSION,
    'MIME-Version: 1.0',
    // boundary parameter required, must be enclosed by quotes
    'Content-Type: multipart/mixed; boundary="' . $boundary . '"',
    "Content-Transfer-Encoding: 7bit",
    "This is a MIME encoded message." // message for restricted transports
]);

// message and attachment
$message    = implode("\r\n", [ 
    "--" . $boundary, // header boundary delimiter line
    'Content-Type: text/plain; charset="iso-8859-1"',
    "Content-Transfer-Encoding: 8bit",
    $message,
    "--" . $boundary, // content boundary delimiter line
    'Content-Type: application/octet-stream; name="RenamedFile.pdf"',
    "Content-Transfer-Encoding: base64",
    "Content-Disposition: attachment",
    $content,
    "--" . $boundary . "--" // closing boundary delimiter line
]);

$result = mail($to, $subject, $message, $headers); // send the email

if ($result) {
    // Success! Redirect to a thank you page. Use the
    // POST/REDIRECT/GET pattern to prevent form resubmissions
    // when a user refreshes the page.
  
    header('Location: http://example.com/path/to/thank-you.php', true, 303);
    exit;
}
else {
    // Your mail was not sent. Check your logs to see if
    // the reason was reported there for you.
}

콘텐츠 전송 인코딩

사용할 수있는 인코딩은 7bit , 8bit , binary , quoted-printable , base64 , ietf-tokenx-token 입니다. 이러한 인코딩 중 헤더에 멀티 파트 Content-Type이있는 경우 Content-Transfer-Encoding RFC 2045, 6.4 절에 설명 된대로 7 비트 , 8 비트 또는 바이너리 이외의 다른 값이되어서 는 안됩니다 .

이 예에서는 RFC 2045 섹션 6에서 언급했듯이 일부 프로토콜이이 인코딩 만 지원하기 때문에 멀티 파트 헤더에 대해 US-ASCII 문자를 나타내는 7 비트 인코딩을 선택합니다. 그런 다음 경계 내의 데이터를 부분별로 인코딩 할 수 있습니다 (RFC 2046, 섹션 5.1). 이 예제는 정확히 이것을 수행합니다. 추가 문자를 지원해야 할 수도 있으므로 text / plain 메시지가 포함 된 첫 번째 부분은 8 비트로 정의됩니다. 이 경우, Latin1 (iso-8859-1) 문자 세트가 사용됩니다. 두 번째 부분은 첨부 파일이므로 base64로 인코딩 된 application / octet-stream으로 정의됩니다. base64는 임의의 데이터를 7 비트 범위로 변환하기 때문에 제한된 전송을 통해 전송 될 수 있습니다 (RFC 2045, 섹션 6.2).

PHPMailer를 사용하여 HTML 전자 메일 보내기

<?php

$mail = new PHPMailer();

$mail->From     = "[email protected]";
$mail->FromName = "Full Name";
$mail->addReplyTo("[email protected]", "Reply Address");
$mail->addAddress("[email protected]", "Recepient Name");
$mail->addAddress("[email protected]"); 
$mail->addCC("[email protected]");
$mail->addBCC("[email protected]");
$mail->Subject  = "Subject Text";
$mail->isHTML(true);
$mail->Body     = "<html><body><p><b>This paragraph is bold.</b></p><p><i>This text is italic.</i></p></body></html>";
$mail->AltBody = "This paragraph is not bold.\n\nThis text is not italic.";

if($mail->send()) {
    // Success! Redirect to a thank you page. Use the
    // POST/REDIRECT/GET pattern to prevent form resubmissions
    // when a user refreshes the page.
  
    header('Location: http://example.com/path/to/thank-you.php', true, 303);
    exit;
} 
else {
    echo "Error: " . $mail->ErrorInfo;
}   

PHPMailer를 사용하여 첨부 파일로 이메일 보내기

<?php

$mail = new PHPMailer();

$mail->From     = "[email protected]";
$mail->FromName = "Full Name";
$mail->addReplyTo("[email protected]", "Reply Address");
$mail->Subject  = "Subject Text";
$mail->Body     = "This is a sample basic text email with an attachment using PHPMailer.";

// Add Static Attachment
$attachment = '/path/to/your/file.pdf';
$mail->AddAttachment($attachment , 'RenamedFile.pdf');

// Add Second Attachment, run-time created. ie: CSV to be open with Excel
$csvHeader = "header1,header2,header3";
$csvData = "row1col1,row1col2,row1col3\nrow2col1,row2col2,row2col3";

$mail->AddStringAttachment($csvHeader ."\n" . $csvData, 'your-csv-file.csv', 'base64', 'application/vnd.ms-excel');

if($mail->send()) {
    // Success! Redirect to a thank you page. Use the
    // POST/REDIRECT/GET pattern to prevent form resubmissions
    // when a user refreshes the page.
  
    header('Location: http://example.com/path/to/thank-you.php', true, 303);
    exit;
} 
else {
    echo "Error: " . $mail->ErrorInfo;
}   

Sendgrid를 사용하여 일반 텍스트 이메일 보내기

기본 텍스트 이메일

<?php

$sendgrid = new SendGrid("YOUR_SENDGRID_API_KEY");
$email    = new SendGrid\Email();

$email->addTo("[email protected]")
      ->setFrom("[email protected]")
      ->setSubject("Subject Text")
      ->setText("This is a sample basic text email using ");

$sendgrid->send($email);

추가 수신자, 참조 수신자, 숨은 참조 수신자 추가

<?php

$sendgrid = new SendGrid("YOUR_SENDGRID_API_KEY");
$email    = new SendGrid\Email();

$email->addTo("[email protected]")
      ->setFrom("[email protected]")
      ->setSubject("Subject Text")
      ->setHtml("<html><body><p><b>This paragraph is bold.</b></p><p><i>This text is italic.</i></p></body></html>");
      
$personalization = new Personalization();
$email = new Email("Recepient Name", "[email protected]");
$personalization->addTo($email);
$email = new Email("RecepientCC Name", "[email protected]");
$personalization->addCc($email);
$email = new Email("RecepientBCC Name", "[email protected]");
$personalization->addBcc($email);
$email->addPersonalization($personalization);
    
$sendgrid->send($email);

Sendgrid를 사용하여 첨부 파일로 이메일 보내기

<?php

$sendgrid = new SendGrid("YOUR_SENDGRID_API_KEY");
$email    = new SendGrid\Email();

$email->addTo("[email protected]")
      ->setFrom("[email protected]")
      ->setSubject("Subject Text")
      ->setText("This is a sample basic text email using ");
      
$attachment = '/path/to/your/file.pdf';
$content    = file_get_contents($attachment);
$content    = chunk_split(base64_encode($content));

$attachment = new Attachment();
$attachment->setContent($content);
$attachment->setType("application/pdf");
$attachment->setFilename("RenamedFile.pdf");
$attachment->setDisposition("attachment");
$email->addAttachment($attachment);

$sendgrid->send($email);


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow