English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Ruby 이메일 SMTP

SMTP(Simple Mail Transfer Protocol)은 간단한 이메일 전송 프로토콜로, 원격 주소에서 목적 주소로 이메일을 전송하는 규칙을 정의합니다. 이는 이메일의 중계 방식을 제어합니다.

Ruby는 Net::SMTP을 통해 이메일을 보내고, new 및 start 두 가지 메서드를 제공합니다:

새로운 메서드는 두 가지 파라미터를 가집니다:

  • 서버 이름 기본적으로 localhost로 설정됩니다

  • 포트 번호 기본적으로  25

시작 메서드는 다음과 같은 파라미터를 가집니다:

  • 서버  - 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: 개인 사람 <[email protected]>
받는 사람: A Test User <[email protected]>
제목: SMTP 이-이메일 테스트
 
This is a test e-mail message.
MESSAGE_END
 
Net::SMTP.start('localhost') do |smtp|
  smtp.send_message message, '[email protected]', 
                             '[email protected]'
end

위 예제에서는 기본적인 이메일 메시지를 설정했습니다. 제목 형식이 올바르게 설정되었는지 주의하세요. 이메일은 From, To, Subject를 필요로 하며, 텍스트 내용과 헤더 정보 사이에는 빈 행이 필요합니다.

Net::SMTP를 사용하여 로컬 기기의 SMTP 서버에 접속하여 send_message 메서드를 사용하여 이메일을 보내면, 메서드 매개변수는 발신자 이메일과 수신자 이메일입니다.

당신이 SMTP 서버를 운영하고 있지 않다면, Net::SMTP를 사용하여 원격 SMTP 서버와 통신할 수 있습니다. Hotmail이나 Yahoo 메일과 같은 네트워크 이메일 서비스를 사용하는 경우, 이메일 제공자는 이메일 서버의 세부 정보를 제공합니다:

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 형식의 이메일을 보내는 데 지원을 제공합니다.

이메일을 보내는 동안 MIME 버전, 문서 유형, 문자 집합을 설정하여 HTML 형식의 이메일을 보낼 수 있습니다.

온라인 예제

다음 예제는 HTML 형식의 이메일을 보내는 데 사용됩니다:

온라인 예제

require 'net/smtp'
 
message = <<MESSAGE_END
From: 개인 사람 <[email protected]>
받는 사람: A Test User <[email protected]>
MIME-버전: 1.0
Content-형식: text/html
제목: SMTP 이-이메일 테스트
 
이 이메일은-HTML 형식으로 보내야 할 이메일 메시지
 
<b>This is HTML message.</b>
<h1>This is headline.</h1>
MESSAGE_END
 
Net::SMTP.start('localhost') do |smtp|
  smtp.send_message message, '[email protected]', 
                             '[email protected]'
end

첨부 파일이 있는 이메일을 보내기

혼합 내용의 이메일을 보내려면 Content를 설정해야 합니다-형식이 multipart/mixed 이렇게 하면 이메일에 첨부 파일 내용을 추가할 수 있습니다.

전송 전 첨부 파일을 사용해야 합니다 pack("m") 함수를 통해 내용을 base로 변환64 양식.

온라인 예제

다음 예제는 첨부 파일을 전송합니다: /tmp/test.txt의 이메일:

온라인 예제

require 'net/smtp'
 
filename = "/tmp/test.txt"
# 파일 읽기 및 base로编码64양식
filecontent = File.read(filename)
encodedcontent = [filecontent].pack("m") # base64
 
marker = "AUNIQUEMARKER"
 
body =<<EOF
이 이메일은 첨부 파일을 보내기 위한 테스트 이메일입니다.
EOF
 
# 주요 헤더 정보 정의
part1 =<<EOF
보내는 사람: Private Person <[email protected]>
받는 사람: A Test User <[email protected]>
제목: 첨부 파일 전송
MIME-버전: 1.0
Content-형식: multipart/mixed; boundary="#{marker}"
--#{marker}
EOF
 
# 메시지 동작 정의
part2 =<<EOF
Content-형식: text/순수
Content-Transfer-Encoding:8비트
 
#{body}
--#{marker}
EOF
 
# 첨부 부분 정의
part3 =<<EOF
Content-형식: 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, '[email protected]',
                          ['[email protected]'])
  end
rescue Exception => e  
  print "Exception occurred: " + e  
end

주의:여러 개의 보내는 주소를 지정할 수 있지만, 쉼표로 구분해야 합니다.