이메일 Email Class¶
CodeIgniter 의 이메일 클래스는 다음의 기능을 제공합니다:
- 다양한 프로토콜지원( Mail, Sendmail, and SMTP)
- SMTP 를 위한 TLS, SSL 암호화
- 다수의 수신자
- CC 와 BCCs
- HTML 또는 일반텍스트 이메일
- 첨부파일
- 자동 줄바꿈
- 우선순위결정
- BCC 배치 모드(대량의 이메일 수신자 목록을 작은 BCC 배치로 쪼개줌)
- 이메일 디버깅 툴
이메일 함수 사용하기 Using the Email Library¶
이메일 보내기 Sending Email¶
이메일 보내기는 단순할뿐만아니라, 쉽게 설정을 추가할 수 있고, 원한다면 설정파일에 설정을 세팅할 수도 있습니다.
아래에 이메일 보내기 기본 예제이 있습니다. Note: 이 예제는 여러분이 컨트롤러 (controllers)에서 이메일을 보낸다는 것을 가정합니다.
$this->load->library('email');
$this->email->from('your@example.com', 'Your Name');
$this->email->to('someone@example.com');
$this->email->cc('another@another-example.com');
$this->email->bcc('them@their-example.com');
$this->email->subject('Email Test');
$this->email->message('Testing the email class.');
$this->email->send();
이메일 환경설정 Setting Email Preferences¶
환경설정 항목은 총 21가지 입니다.여기에서 설명하는 것 처럼 여러분이 직접 설정할 수도 있고, 설정파일을 통해 자동으로 설정할 수도 있습니다:
환경설정을 하려면 먼저 설정내용을 배열로 만든후, 이메일 초기화(initialize)함수로 전달하면 됩니다. 아래에 예제가 있습니다:
$config['protocol'] = 'sendmail';
$config['mailpath'] = '/usr/sbin/sendmail';
$config['charset'] = 'iso-8859-1';
$config['wordwrap'] = TRUE;
$this->email->initialize($config);
Note
대부분의 설정은 기본값을가지고 있기 때문에 여러분이 설정값을 지정하지 않으면 그 기본값으로 설정 됩니다.
환경설정파일에서 이메일 환경설정 Setting Email Preferences in a Config File¶
위와 같이 직접 설정하지 않고 자동으로 설정되게 하려면, 환경설정파일에 설정값을 저장하세요 .먼저 email.php파일을 새로 만듧니다. 그리고 $config 배열을 그 파일에 추가합니다.마지막으로 config/email.php 로 저장합니다. 이렇게 하면 $this->email->initialize() 함수를 사용할 필요가 없습니다.
이메일 환경설정 Email Preferences¶
아래는 이메일 전송시 사용되는 설정 항목입니다.
항목 | 기본값 | 옵션 | 설명 |
---|---|---|---|
useragent | CodeIgniter | None | The “user agent”. |
protocol | mail, sendmail, or smtp | 메일전송 프로토콜(The mail sending protocol). | |
mailpath | /usr/sbin/sendmail | None | Sendmail함수의 서버상 경로(The server path to Sendmail). |
smtp_host | No Default | None | SMTP서버주소(SMTP Server Address). |
smtp_user | No Default | None | SMTP서버 사용자 아이디(SMTP Username). |
smtp_pass | No Default | None | SMTP서버 사용자 암호(SMTP Password). |
smtp_port | 25 | None | SMTP서버 포트(SMTP Port). |
smtp_timeout | 5 | None | SMTP서버 타임아웃(최대처리 혹은 대기)시간(초)(SMTP Timeout (in seconds)). |
smtp_keepalive | FALSE | TRUE or FALSE (boolean) | 지속적인 SMTP 연결 사용(Enable persistent SMTP connections). |
smtp_crypto | No Default | tls or ssl | SMTP 암호화 (SMTP Encryption) |
wordwrap | TRUE | TRUE or FALSE (boolean) | 자동줄바꿈(Enable word-wrap). |
wrapchars | 76 | 자동줄바꿈시 한 줄에 몇개의 문자를 허용할 것인가를결정(Character count to wrap at). | |
mailtype | text | text or html | 메일 타입(일반텍스트/ html). 만약 html 형태의 메일을 보낸다면 삽입된 링크나 이미지 의 경로는 절대경로를 사용하세요 . 그렇지않으면 여러분의 컴퓨터에서 잘보이던 페이지가 메일을 받은사람에게는 이것저것 깨져보일테니까요. |
charset | $config['charset'] | 문자셋(utf-8, iso-8859-1 등)(Character set (utf-8, iso-8859-1, etc.)). | |
validate | FALSE | TRUE or FALSE (boolean) | 이메일주소가 적합한지 여부를 검사할지 말지 결정(Whether to validate the email address). |
priority | 3 | 1, 2, 3, 4, 5 | 이메일 우선순위1 =가장높음. 5 =가장낮음 . 3 = 중간. |
crlf | \n | “\r\n” or “\n” or “\r” | 줄바꿈 문자 (RFC 822를 준수하기 위해 “\r\n” 를 사용함). |
newline | \n | “\r\n” or “\n” or “\r” | 줄바꿈 문자 (RFC 822를 준수하기 위해 “\r\n” 를 사용함). |
bcc_batch_mode | FALSE | TRUE or FALSE (boolean) | BCC 배치모드 사용여부결정(Enable BCC Batch Mode). |
bcc_batch_size | 200 | None | 각 BCC 배치에 몇개의 메일주소를 포함하도록 할 것인지 결정(Number of emails in each BCC batch). |
dsn | FALSE | TRUE or FALSE (boolean) | 서버에서 통지메시지를 사용할지 결정 |
자동줄바꿈 재정의 Overriding Word Wrapping¶
자동줄바끔을 활성하는 경우 (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 Reference¶
- class CI_Email¶
- from($from[, $name = ''[, $return_path = NULL]])¶
인수: - $from (string) – “From” e-mail address
- $name (string) – “From” display name
- $return_path (string) – Optional email address to redirect undelivered e-mail to
반환값: CI_Email instance (method chaining)
반환형: CI_Email
이메일 주소와 발신자명 세팅:
$this->email->from('you@example.com', 'Your Name');
배달되지 않은 메일을 리다이렉션 하는데 도움이 되게 답신받을 주소를 세팅합니다:
$this->email->from('you@example.com', 'Your Name', 'returned_emails@example.com');
Note
Return-Path can’t be used if you’ve configured ‘smtp’ as your protocol.
- reply_to($replyto[, $name = ''])¶
인수: - $replyto (string) – E-mail address for replies
- $name (string) – Display name for the reply-to e-mail address
반환값: CI_Email instance (method chaining)
반환형: CI_Email
답신을 받을(reply-to) 메일 주소와 이름을 설정합니다. 설정하지 않으면 from 함수에서 제공된 정보를 기본으로 사용하게 됩니다. 예제:
$this->email->reply_to('you@example.com', 'Your Name');
- to($to)¶
인수: - $to (mixed) – Comma-delimited string or an array of e-mail addresses
반환값: CI_Email instance (method chaining)
반환형: CI_Email
수신자의 이메일 주소를 설정합니다. 하나 이상의 주소를 설정할 수 있으며, 여러 개를 설정할 때는 콤마(,)로 구분하여 설정하거나, 배열로 넘겨줄 수도 있습니다:
$this->email->to('someone@example.com');
$this->email->to('one@example.com, two@example.com, three@example.com');
$this->email->to( array('one@example.com', 'two@example.com', 'three@example.com') );
- cc($cc)¶
인수: - $cc (mixed) – Comma-delimited string or an array of e-mail addresses
반환값: CI_Email instance (method chaining)
반환형: CI_Email
CC 메일주소를 설정합니다. “to” 함수처럼, 하나 이상의 주소를 설정할 수 있으며, 여러 개를 설정할 때는 콤마(,)로 구분하여 설정하거나, 배열로 넘겨줄 수도 있습니다.
- bcc($bcc[, $limit = ''])¶
인수: - $bcc (mixed) – Comma-delimited string or an array of e-mail addresses
- $limit (int) – Maximum number of e-mails to send per batch
반환값: CI_Email instance (method chaining)
반환형: CI_Email
BCC 메일주소를 설정합니다. “to” 함수처럼, 하나 이상의 주소를 설정할 수 있으며, 여러 개를 설정할 때는 콤마(,)로 구분하여 설정하거나, 배열로 넘겨줄 수도 있습니다.
If $limit is set, “batch mode” will be enabled, which will send the emails to batches, with each batch not exceeding the specified $limit.
- subject($subject)¶
인수: - $subject (string) – E-mail subject line
반환값: CI_Email instance (method chaining)
반환형: CI_Email
메일 제목을 설정합니다:
$this->email->subject('This is my subject');
- message($body)¶
인수: - $body (string) – E-mail message body
반환값: CI_Email instance (method chaining)
반환형: CI_Email
이메일 내용을 설정합니다:
$this->email->message('This is my message');
- set_alt_message($str)¶
인수: - $str (string) – Alternative e-mail message body
반환값: CI_Email instance (method chaining)
반환형: CI_Email
대체 내용을 설정합니다:
$this->email->set_alt_message('This is the alternative message');
HTML 메일을 수신하지 못하는 수신자에게 전달하는 경우에 html로 작성된 내용을 대신할 내용을 설정합니다. 이 항목은 html로 내용을 작성할 경우에 사용할 수 있는 옵션입니다. html 메세지를 보낼때 본 함수를 사용하여 대체메시지를 작성하시지않으면, CodeIgniter 는 자동으로 html 메세지에서 태그를 제거하여 대체메세지로 사용합니다.
- set_header($header, $value)¶
인수: - $header (string) – Header name
- $value (string) – Header value
반환값: CI_Email instance (method chaining)
반환형: CI_Email
e-mail 에 추가적은 header 를 설정합니다:
$this->email->set_header('Header1', 'Value1'); $this->email->set_header('Header2', 'Value2');
- clear([$clear_attachments = FALSE])¶
인수: - $clear_attachments (bool) – Whether or not to clear attachments
반환값: CI_Email instance (method chaining)
반환형: CI_Email
모든 이메일 변수들을 초기화 하여 비웁니다. 이 함수는 루프를 이용하여 메일을 전송할 경우를 위하여 각 사이클 마다 데이터를 리셋하도록 해줍니다.
foreach ($list as $name => $address) { $this->email->clear(); $this->email->to($address); $this->email->from('your@example.com'); $this->email->subject('Here is your info '.$name); $this->email->message('Hi '.$name.' Here is the info you requested.'); $this->email->send(); }
파라미터로 TRUE 를 넘겨주면, 첨부파일도 함께 비워집니다:
$this->email->clear(TRUE);
- send([$auto_clear = TRUE])¶
인수: - $auto_clear (bool) – Whether to clear message data automatically
반환값: TRUE on success, FALSE on failure
반환형: bool
메일전송함수입니다. 전송성공여부에 따라서 TRUE / FALSE를 반환합니다. 아래와 같이 전송성공여부를 체크하여 적절히 코딩하시면 되겠죠:
if ( ! $this->email->send()) { // Generate error }
이 함수는 만약에 인자로 FALSE를 넘기면, 그리고 요청이 성공하면, 모든 파라미터를 자동 초기화합니다:
if ($this->email->send(FALSE)) { // Parameters won't be cleared }
Note
print_debugger() 함수를 사용하기 위해서는, 이메일 파라미터를 초기화하지 말아주세요.
- attach($filename[, $disposition = ''[, $newname = NULL[, $mime = '']]])¶
인수: - $filename (string) – File name
- $disposition (string) – ‘disposition’ of the attachment. Most email clients make their own decision regardless of the MIME specification used here. https://www.iana.org/assignments/cont-disp/cont-disp.xhtml
- $newname (string) – Custom file name to use in the e-mail
- $mime (string) – MIME type to use (useful for buffered data)
반환값: CI_Email instance (method chaining)
반환형: CI_Email
파일을 첨부할 수 있게 해주는 함수입니다. 파일 경로와이름(path/name)을 첫 번째 파라미터로 넘겨주세요. URL이 아니라 파일경로를 넘겨야 합니다. 여러 개의 파일을 첨부할 경우 함수를 여러 번 호출해주시면 됩니다 예제:
$this->email->attach('/path/to/photo1.jpg'); $this->email->attach('/path/to/photo2.jpg'); $this->email->attach('/path/to/photo3.jpg');
기본 첨부파일을 사용하려면, 2번째 파라마터를 공백으로 남겨두세요. 그렇지 않으면 사용자 지정값을 사용합니다:
$this->email->attach('image.jpg', 'inline');
URL 을 사용할 수도 있습니다:
$this->email->attach('http://example.com/filename.pdf');
사용자 정의 파일명을 사용하고 싶으면, 세 번째 파라미터를 이용하세요:
$this->email->attach('filename.pdf', 'attachment', 'report.pdf');
만약에 real - physical - file 대신에 buffer string 을 사용하고 싶다면, 첫 번째 파라미터를 buffer 로 남겨두세요, 세 번째 파라미터는 파일명, 네 번째 파라미터는 mime-type 입니다:
$this->email->attach($buffer, 'attachment', 'report.pdf', 'application/pdf');
- attachment_cid($filename)¶
인수: - $filename (string) – Existing attachment filename
반환값: Attachment Content-ID or FALSE if not found
반환형: 문자열
HTML 안에 첨부파일을 포함시킬 수 있도록, 첨부파일의 Content-ID 를 설정하고 반환합니다. 첫 번째 파라미터는 이미 첨부된 파일명이어야 합니다.
$filename = '/img/photo1.jpg'; $this->email->attach($filename); foreach ($list as $address) { $this->email->to($address); $cid = $this->email->attach_cid($filename); $this->email->message('<img src='cid:". $cid ."' alt="photo1" />'); $this->email->send(); }
Note
각 이메일의 Content-ID 는 반드시 유일해야 하기 때문에 재생성되어야 합니다.
- print_debugger([$include = array('headers', 'subject', 'body')])¶
인수: - $include (array) – Which parts of the message to print out
반환값: Formatted debug data
반환형: 문자열
모든 서버메세지, 이메일 헤더, 이메일 메세지들을 포함한 문자열을 리턴합니다. 디버깅시에 유용합니다.
메세지의 어느 부분이 출력되어야 하는지 선택 지정할 수 있습니다. 옵션은 : headers, subject, body.
예제:
// You need to pass FALSE while sending in order for the email data // to not be cleared - if that happens, print_debugger() would have // nothing to output. $this->email->send(FALSE); // Will only print the email headers, excluding the message subject and body $this->email->print_debugger(array('headers'));
Note
기본적으로 모든 원시 데이터가 출력될 것입니다.