Ruby 이메일 보내기 - SMATP
SMTP(Simple Mail Transfer Protocol)는 편지의 전송 방법을 제어하는 간단한 메일 전송 프로토콜입니다.
Ruby는 이메일 전송을 위해 Net::SMTP를 제공하고 new 및 start의 두 가지 메소드를 제공합니다.
new 메소드에는 두 개의 매개변수가 있습니다:
server name 기본값은 localhost
포트 번호입니다. 기본값은 25
start 메서드에는 다음 매개변수가 있습니다.
server - SMTP 서버 IP, 기본값은 localhost
port - 포트 번호, 기본값은 25
-
domain - 이메일 발신자 도메인 이름, 기본값은 ENV["HOSTNAME"]
account - 사용자 이름, 기본값은 nil
password - 사용자 비밀번호, 기본값은 nil
authtype - 인증 유형, 기본값은 cram_md5
SMTP 객체 인스턴스화 방법은 다음 매개변수를 사용하여 sendmail을 호출합니다.
source - 언제든지 문자열이나 배열 또는 각 반복자 무엇이든 반환됩니다.
sender - 이메일 양식 필드에 표시되는 문자열입니다.
recipients - 수신자의 주소를 나타내는 문자열 또는 문자열 배열입니다.
예
이메일을 보내기 위한 간단한 Ruby 스크립트가 아래에 제공됩니다.
require 'net/smtp' message = <<MESSAGE_END From: Private Person <me@fromdomain.com> To: A Test User <test@todomain.com> Subject: SMTP e-mail test This is a test e-mail message. MESSAGE_END Net::SMTP.start('localhost') do |smtp| smtp.send_message message, 'me@fromdomain.com', 'test@todomain.com' end
Net::SMTP를 사용하여 로컬 시스템의 SMTP 서버에 연결하고 send_message 메소드를 사용하여 이메일을 보냅니다. 메소드 매개변수는 보낸 사람의 이메일과 받는 사람의 이메일입니다.
로컬 컴퓨터에서 실행 중인 SMTP 서버가 없는 경우 Net::SMTP를 사용하여 원격 SMTP 서버와 통신할 수 있습니다. 웹메일 서비스(예: Hotmail 또는 Yahoo Mail)를 사용하는 경우 이메일 제공업체에서 보내는 메일 서버의 세부정보를 제공합니다.
Net::SMTP.start('mail.your-domain.com')
위 코드는 호스트 mail.your-domain.com 및 포트에 연결됩니다. 25번 메일 서버, 사용자 이름과 비밀번호를 입력해야 하는 경우 코드는 다음과 같습니다.
Net::SMTP.start('mail.your-domain.com', 25, 'localhost', 'username', 'password', :plain)
위의 예에서는 지정된 사용자 이름과 비밀번호를 사용하여 호스트 mail.your-를 사용하여 메일 서버에 연결합니다. domain.com 및 포트 번호 25 .
Ruby를 사용하여 HTML 이메일 보내기
Net::SMTP는 HTML 형식으로 이메일 보내기도 지원합니다.
이메일을 보낼 때 HTML 형식으로 이메일을 보내도록 MIME 버전, 문서 유형, 문자 집합을 설정할 수 있습니다.
예제
다음 예는 HTML 형식으로 이메일을 보내는 데 사용됩니다.
require 'net/smtp' message = <<MESSAGE_END From: Private Person <me@fromdomain.com> To: A Test User <test@todomain.com> MIME-Version: 1.0 Content-type: text/html Subject: SMTP e-mail test This is an e-mail message to be sent in HTML format <b>This is HTML message.</b> <h1>This is headline.</h1> MESSAGE_END Net::SMTP.start('localhost') do |smtp| smtp.send_message message, 'me@fromdomain.com', 'test@todomain.com' end
첨부 파일이 포함된 이메일 보내기
혼합 콘텐츠가 포함된 이메일을 보내야 하는 경우 콘텐츠 유형을 multipart/mixed로 설정해야 합니다. 이렇게 하면 이메일에 첨부 파일 내용을 추가할 수 있습니다.
첨부 파일은 전송하기 전에 pack("m") 기능을 사용하여 내용을 base64 형식으로 변환해야 합니다.
Example
다음 예에서는 첨부 파일이 /tmp/test.txt인 이메일을 보냅니다.
require 'net/smtp' filename = "/tmp/test.txt" # 读取文件并编码为base64格式 filecontent = File.read(filename) encodedcontent = [filecontent].pack("m") # base64 marker = "AUNIQUEMARKER" body =<<EOF This is a test email to send an attachement. EOF # 定义主要的头部信息 part1 =<<EOF From: Private Person <me@fromdomain.net> To: A Test User <test@todmain.com> Subject: Sending Attachement MIME-Version: 1.0 Content-Type: multipart/mixed; boundary=#{marker} --#{marker} EOF # 定义消息动作 part2 =<<EOF Content-Type: text/plain Content-Transfer-Encoding:8bit #{body} --#{marker} EOF # 定义附件部分 part3 =<<EOF Content-Type: multipart/mixed; name=\"#{filename}\" Content-Transfer-Encoding:base64 Content-Disposition: attachment; filename="#{filename}" #{encodedcontent} --#{marker}-- EOF mailtext = part1 + part2 + part3 # 发送邮件 begin Net::SMTP.start('localhost') do |smtp| smtp.sendmail(mailtext, 'me@fromdomain.net', ['test@todmain.com']) end rescue Exception => e print "Exception occured: " + e end
참고: 발신 주소를 여러 개 지정할 수 있지만 쉼표로 구분해야 합니다.