English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
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의 이메일 서버.
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
주의:여러 개의 보내는 주소를 지정할 수 있지만, 쉼표로 구분해야 합니다.