이메일 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 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

기본적으로 모든 원시 데이터가 출력될 것입니다.