이메일 클래스
CodeIgniter의 강력한 이메일 클래스는 다음 기능을 지원합니다:
다중 프로토콜: Mail, Sendmail, SMTP
SMTP를 위한 TLS 및 SSL 암호화
다중 수신자
CC 및 BCC
HTML 또는 일반 텍스트 이메일
첨부 파일
자동 줄 바꿈
우선순위
BCC 배치 모드: 대규모 이메일 목록을 작은 BCC 배치로 나눌 수 있습니다.
이메일 디버깅 도구
이메일 라이브러리 사용
이메일 전송
이메일 전송은 간단할 뿐만 아니라, 즉석에서 설정하거나 app/Config/Email.php 파일에 기본 설정을 지정할 수 있습니다.
이메일을 전송하는 기본 예제입니다:
<?php
$email = service('email');
$email->setFrom('your@example.com', 'Your Name');
$email->setTo('someone@example.com');
$email->setCC('another@another-example.com');
$email->setBCC('them@their-example.com');
$email->setSubject('Email Test');
$email->setMessage('Testing the email class.');
$email->send();
이메일 기본 설정
이메일 메시지 전송 방식을 조정할 수 있는 22가지 기본 설정이 있습니다. 여기서 설명하는 것처럼 수동으로 설정하거나, Email Preferences에서 설명하는 설정 파일에 저장된 기본 설정을 통해 자동으로 설정할 수 있습니다.
배열을 전달하여 이메일 기본 설정
기본 설정은 이메일 초기화 메서드에 기본 설정 값 배열을 전달하여 지정합니다. 일부 기본 설정을 지정하는 예제입니다:
<?php
$config['protocol'] = 'sendmail';
$config['mailPath'] = '/usr/sbin/sendmail';
$config['charset'] = 'iso-8859-1';
$config['wordWrap'] = true;
$email->initialize($config);
참고
대부분의 기본 설정은 설정하지 않으면 사용될 기본값을 가지고 있습니다.
설정 파일에서 이메일 기본 설정
위의 방법으로 기본 설정을 지정하지 않으려면 설정 파일에 넣을 수 있습니다. app/Config/Email.php 파일을 열고 Email 속성에 설정을 지정한 다음 파일을 저장하면 자동으로 사용됩니다. 설정 파일에서 기본 설정을 지정한 경우 $email->initialize() 메서드를 사용할 필요가 없습니다.
SMTP 프로토콜의 SSL과 TLS 비교
SMTP 서버와 통신할 때 사용자 이름, 비밀번호, 이메일 내용을 보호하려면 채널 암호화를 사용해야 합니다. 두 가지 다른 표준이 널리 사용되고 있으며, 이메일 전송 문제를 해결할 때 그 차이를 이해하는 것이 중요합니다.
대부분의 SMTP 서버는 이메일 제출 시 포트 465 또는 587로의 연결을 허용합니다. (원래 포트 25는 많은 ISP가 차단 규칙을 적용하고 있고 통신이 전부 평문으로 이루어지기 때문에 거의 사용되지 않습니다.)
핵심 차이점은 포트 465는 RFC 8314에 따라 처음부터 TLS를 사용하여 통신 채널이 보호될 것을 요구한다는 점입니다. 포트 587로의 연결은 평문 연결을 허용하다가 나중에 STARTTLS SMTP 명령을 사용하여 암호화로 채널을 업그레이드합니다.
포트 465에서의 연결 업그레이드는 서버에서 지원될 수도 있고 지원되지 않을 수도 있으므로, 서버가 허용하지 않으면 STARTTLS SMTP 명령이 실패할 수 있습니다. 포트를 465로 설정한 경우 처음부터 TLS로 통신이 보호되고 STARTTLS가 필요하지 않으므로 SMTPCrypto를 빈 문자열('')로 설정해 보세요.
포트 587로 연결해야 하는 설정이라면 SMTPCrypto를 tls로 설정하는 것이 좋습니다. 이렇게 하면 SMTP 서버와 통신하는 동안 STARTTLS 명령을 실행하여 평문에서 암호화 채널로 전환합니다. 초기 통신은 평문으로 이루어지며 STARTTLS 명령으로 채널이 TLS로 업그레이드됩니다.
기본 설정 검토
마지막으로 성공한 전송에 사용된 설정은 인스턴스 속성 $archive에서 확인할 수 있습니다. send() 호출 시점의 실제 값을 확인하는 테스트 및 디버깅에 유용합니다.
이메일 기본 설정
다음은 이메일 전송 시 설정할 수 있는 모든 기본 설정 목록입니다.
기본 설정 |
기본값 |
옵션 |
설명 |
|---|---|---|---|
fromEmail |
“from” 헤더에 설정할 이메일 주소. |
||
fromName |
“from” 헤더에 설정할 이름. |
||
userAgent |
CodeIgniter |
“user agent” 값. |
|
protocol |
|
메일 전송 프로토콜. |
|
mailPath |
/usr/sbin/sendmail |
Sendmail의 서버 경로. |
|
SMTPHost |
SMTP 서버 호스트명. |
||
SMTPAuthMethod |
login |
|
SMTP 인증 방법. (4.7.0부터 사용 가능) |
SMTPUser |
SMTP 사용자 이름. |
||
SMTPPass |
SMTP 비밀번호. |
||
SMTPPort |
25 |
SMTP 포트. ( |
|
SMTPTimeout |
5 |
SMTP 타임아웃(초). |
|
SMTPKeepAlive |
false |
|
지속적인 SMTP 연결 활성화. |
SMTPCrypto |
tls |
|
SMTP 암호화. |
wordWrap |
true |
|
자동 줄 바꿈 활성화. |
wrapChars |
76 |
줄 바꿈 기준 문자 수. |
|
mailType |
text |
|
메일 유형. HTML 이메일을 전송하는 경우 완전한 웹 페이지로 전송해야 합니다. 상대 링크나 상대 이미지 경로가 없는지 확인하세요. 그렇지 않으면 작동하지 않습니다. |
charset |
UTF-8 |
문자 집합( |
|
validate |
true |
|
이메일 주소의 유효성 검사 여부. |
priority |
3 |
1, 2, 3, 4, 5 |
이메일 우선순위. |
CRLF |
\r\n |
|
개행 문자. (RFC 822를 준수하려면 |
newline |
\r\n |
|
개행 문자. (RFC 822를 준수하려면 |
BCCBatchMode |
false |
|
BCC 배치 모드 활성화. |
BCCBatchSize |
200 |
각 BCC 배치의 이메일 수. |
|
DSN |
false |
|
서버의 알림 메시지 활성화. |
자동 줄 바꿈 재정의
자동 줄 바꿈을 활성화한 경우(RFC 822 준수를 위해 권장) 이메일에 매우 긴 링크가 있으면 해당 링크도 줄 바꿈이 되어 수신자가 클릭할 수 없게 될 수 있습니다. CodeIgniter는 다음과 같이 메시지의 일부에서 자동 줄 바꿈을 수동으로 재정의할 수 있습니다:
The text of your email that
gets wrapped normally.
{unwrap}http://example.com/a_long_link_that_should_not_be_wrapped.html{/unwrap}
More text that will be
wrapped normally.
줄 바꿈을 원하지 않는 항목을 다음 사이에 넣으세요: {unwrap} {/unwrap}
클래스 레퍼런스
- class CodeIgniter\Email\Email
- setFrom($from[, $name = ''[, $returnPath = null]])
- 매개변수:
$from (
string) – “From” 이메일 주소$name (
string) – “From” 표시 이름$returnPath (
string) – 배달되지 않은 이메일을 리디렉션할 선택적 이메일 주소
- 반환:
CodeIgniter\Email\Email 인스턴스(메서드 체이닝)
- 반환 형식:
이메일을 보내는 사람의 이메일 주소와 이름을 설정합니다:
<?php $email->setFrom('you@example.com', 'Your Name');
배달되지 않은 메일을 리디렉션하는 데 도움이 되는 Return-Path를 설정할 수도 있습니다:
<?php $email->setFrom('you@example.com', 'Your Name', 'returned_emails@example.com');
참고
프로토콜을 ‘smtp’로 설정한 경우 Return-Path를 사용할 수 없습니다.
- setReplyTo($replyto[, $name = ''])
- 매개변수:
$replyto (
string) – 답장을 받을 이메일 주소$name (
string) – 답장 이메일 주소의 표시 이름
- 반환:
CodeIgniter\Email\Email 인스턴스(메서드 체이닝)
- 반환 형식:
답장 주소를 설정합니다. 정보가 제공되지 않으면 setFrom 메서드의 정보가 사용됩니다. 예제:
<?php $email->setReplyTo('you@example.com', 'Your Name');
- setTo($to)
- 매개변수:
$to (
mixed) – 쉼표로 구분된 문자열 또는 이메일 주소 배열
- 반환:
CodeIgniter\Email\Email 인스턴스(메서드 체이닝)
- 반환 형식:
수신자의 이메일 주소를 설정합니다. 단일 이메일, 쉼표로 구분된 목록 또는 배열을 사용할 수 있습니다:
<?php $email->setTo('someone@example.com');
<?php $email->setTo('one@example.com, two@example.com, three@example.com');
<?php $email->setTo(['one@example.com', 'two@example.com', 'three@example.com']);
- setCC($cc)
- 매개변수:
$cc (
mixed) – 쉼표로 구분된 문자열 또는 이메일 주소 배열
- 반환:
CodeIgniter\Email\Email 인스턴스(메서드 체이닝)
- 반환 형식:
CC 이메일 주소를 설정합니다. “to”와 마찬가지로 단일 이메일, 쉼표로 구분된 목록 또는 배열을 사용할 수 있습니다.
- setBCC($bcc[, $limit = ''])
- 매개변수:
$bcc (
mixed) – 쉼표로 구분된 문자열 또는 이메일 주소 배열$limit (
int) – 배치당 전송할 최대 이메일 수
- 반환:
CodeIgniter\Email\Email 인스턴스(메서드 체이닝)
- 반환 형식:
BCC 이메일 주소를 설정합니다.
setTo()메서드와 마찬가지로 단일 이메일, 쉼표로 구분된 목록 또는 배열을 사용할 수 있습니다.$limit이 설정되면 “배치 모드”가 활성화되어 각 배치가 지정된$limit을 초과하지 않도록 배치로 이메일을 전송합니다.
- setSubject($subject)
- 매개변수:
$subject (
string) – 이메일 제목 줄
- 반환:
CodeIgniter\Email\Email 인스턴스(메서드 체이닝)
- 반환 형식:
이메일 제목을 설정합니다:
<?php $email->setSubject('This is my subject');
- setMessage($body)
- 매개변수:
$body (
string) – 이메일 메시지 본문
- 반환:
CodeIgniter\Email\Email 인스턴스(메서드 체이닝)
- 반환 형식:
이메일 메시지 본문을 설정합니다:
<?php $email->setMessage('This is my message');
- setAltMessage($str)
- 매개변수:
$str (
string) – 대체 이메일 메시지 본문
- 반환:
CodeIgniter\Email\Email 인스턴스(메서드 체이닝)
- 반환 형식:
대체 이메일 메시지 본문을 설정합니다:
<?php $email->setAltMessage('This is the alternative message');
HTML 형식의 이메일을 전송할 때 사용할 수 있는 선택적 메시지 문자열입니다. HTML 이메일을 수락하지 않는 사람들을 위해 HTML 형식이 없는 대체 메시지를 헤더 문자열에 추가할 수 있습니다. 자신의 메시지를 설정하지 않으면 CodeIgniter가 HTML 이메일에서 메시지를 추출하고 태그를 제거합니다.
- setHeader($header, $value)
- 매개변수:
$header (
string) – 헤더 이름$value (
string) – 헤더 값
- 반환:
CodeIgniter\Email\Email 인스턴스(메서드 체이닝)
- 반환 형식:
이메일에 추가 헤더를 덧붙입니다:
<?php $email->setHeader('Header1', 'Value1'); $email->setHeader('Header2', 'Value2');
- clear($clearAttachments = false)
- 매개변수:
$clearAttachments (
bool) – 첨부 파일 초기화 여부
- 반환:
CodeIgniter\Email\Email 인스턴스(메서드 체이닝)
- 반환 형식:
모든 이메일 변수를 빈 상태로 초기화합니다. 이 메서드는 이메일 전송 메서드를 루프에서 실행할 때 사용하도록 설계되어 있으며, 사이클 간에 데이터를 초기화할 수 있습니다.
<?php foreach ($list as $name => $address) { $email->clear(); $email->setTo($address); $email->setFrom('your@example.com'); $email->setSubject('Here is your info ' . $name); $email->setMessage('Hi ' . $name . ' Here is the info you requested.'); $email->send(); }
매개변수를 true로 설정하면 첨부 파일도 함께 초기화됩니다:
<?php $email->clear(true);
- send($autoClear = true)
- 매개변수:
$autoClear (
bool) – 메시지 데이터 자동 초기화 여부
- 반환:
성공 시 true, 실패 시 false
- 반환 형식:
bool
이메일 전송 메서드입니다. 성공 또는 실패에 따라 부울 true 또는 false를 반환하므로 조건부로 사용할 수 있습니다:
<?php if (! $email->send()) { // Generate error }
이 메서드는 요청이 성공하면 자동으로 모든 매개변수를 초기화합니다. 이 동작을 중지하려면 false를 전달하세요:
<?php if ($email->send(false)) { // Parameters won't be cleared }
참고
printDebugger()메서드를 사용하려면 이메일 매개변수를 초기화하지 않아야 합니다.참고
BCCBatchMode가 활성화되어 있고 수신자가BCCBatchSize보다 많으면 이 메서드는 항상 부울true를 반환합니다.
- attach($filename[, $disposition = ''[, $newname = null[, $mime = '']]])
- 매개변수:
$filename (
string) – 파일 이름$disposition (
string) – 첨부 파일의 ‘disposition’. 대부분의 이메일 클라이언트는 여기서 사용된 MIME 사양에 관계없이 자체적으로 결정합니다. https://www.iana.org/assignments/cont-disp/cont-disp.xhtml$newname (
string) – 이메일에서 사용할 사용자 지정 파일 이름$mime (
string) – 사용할 MIME 유형(버퍼링된 데이터에 유용)
- 반환:
CodeIgniter\Email\Email 인스턴스(메서드 체이닝)
- 반환 형식:
첨부 파일을 전송할 수 있도록 합니다. 첫 번째 매개변수에 파일 경로/이름을 넣으세요. 여러 첨부 파일의 경우 메서드를 여러 번 사용하세요. 예제:
<?php $email->attach('/path/to/photo1.jpg'); $email->attach('/path/to/photo2.jpg'); $email->attach('/path/to/photo3.jpg');
기본 disposition(attachment)을 사용하려면 두 번째 매개변수를 비워 두세요. 그렇지 않으면 사용자 지정 disposition을 사용하세요:
<?php $email->attach('image.jpg', 'inline');
URL을 사용할 수도 있습니다:
<?php $email->attach('http://example.com/filename.pdf');
사용자 지정 파일 이름을 사용하려면 세 번째 매개변수를 사용할 수 있습니다:
<?php $email->attach('filename.pdf', 'attachment', 'report.pdf');
실제 물리적 파일 대신 버퍼 문자열을 사용해야 하는 경우 첫 번째 매개변수를 버퍼로, 세 번째 매개변수를 파일 이름으로, 네 번째 매개변수를 MIME 유형으로 사용할 수 있습니다:
<?php $email->attach($buffer, 'attachment', 'report.pdf', 'application/pdf');
- setAttachmentCID($filename)
- 매개변수:
$filename (
string) – 기존 첨부 파일 이름
- 반환:
첨부 파일 Content-ID, 찾을 수 없으면 false
- 반환 형식:
string
첨부 파일의 Content-ID를 설정하고 반환합니다. 이를 통해 인라인(그림) 첨부 파일을 HTML에 삽입할 수 있습니다. 첫 번째 매개변수는 이미 첨부된 파일 이름이어야 합니다.
<?php $filename = '/img/photo1.jpg'; $email->attach($filename); foreach ($list as $address) { $email->setTo($address); $cid = $email->setAttachmentCID($filename); $email->setMessage('<img src="cid:' . $cid . '" alt="photo1">'); $email->send(); }
참고
각 이메일의 Content-ID는 고유하게 유지하기 위해 재생성해야 합니다.
- printDebugger($include = ['headers', 'subject', 'body'])
- 매개변수:
$include (
array) – 출력할 메시지 부분
- 반환:
형식화된 디버그 데이터
- 반환 형식:
string
서버 메시지, 이메일 헤더 및 이메일 메시지를 포함하는 문자열을 반환합니다. 디버깅에 유용합니다.
선택적으로 메시지의 어느 부분을 출력할지 지정할 수 있습니다. 유효한 옵션은 headers, subject, body입니다.
예제:
<?php // You need to pass false while sending in order for the email data // to not be cleared - if that happens, printDebugger() would have // nothing to output. $email->send(false); // Will only print the email headers, excluding the message subject and body $email->printDebugger(['headers']);
참고
기본적으로 모든 원시 데이터가 출력됩니다.