Ruby를 사용하여 이메일 보내기-SMTP
SMTP (Simple Mail Transfer Protocol)는 전자 메일 보내기 및 메일 서버 간 전자 메일 라우팅을 처리하는 프로토콜입니다.
Ruby는 SMTP (Simple Mail Transfer Protocol) 클라이언트 측 연결을위한 Net :: SMTP 클래스를 제공 하고 new 및 start .
그만큼 new 두 개의 매개 변수를 취합니다-
서버 이름을 localhost로 디폴트.
포트 번호 잘 알려진 포트 25을 디폴트.
그만큼 start 방법은 다음 매개 변수를 취합니다-
서버 - SMTP 서버의 IP 이름, localhost로 디폴트.
포트 - 25 디폴트 포트 번호.
도메인 -메일 발신자 의 도메인 , ENV [ "HOSTNAME"]로 기본 설정.
계정 - 사용자 이름, 기본값은 전무하다.
암호 - 사용자 암호, 전무을 디폴트.
authType이 - 인증 유형을 디폴트 cram_md5 .
SMTP 개체에는 일반적으로 메시지 메일 링 작업을 수행하는 데 사용되는 sendmail이라는 인스턴스 메서드가 있습니다. 세 가지 매개 변수가 필요합니다.
소스 -있는 문자열이나 배열 또는 아무것도 각 반복자는 한 번에 하나의 문자열을 반환.
보낸 사람 -에 나타납니다 문자열 에서 이메일의 필드.
수신자 - 문자열이나 수신자의 수신자 (들)을 나타내는 문자열의 배열.
예
다음은 Ruby 스크립트를 사용하여 하나의 이메일을 보내는 간단한 방법입니다. 한 번 시도해보세요-
require 'net/smtp'
message = <<MESSAGE_END
From: Private Person <[email protected]>
To: A Test User <[email protected]>
Subject: SMTP e-mail test
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! Mail)를 사용하지 않는 한, 이메일 제공 업체는 다음과 같이 Net :: SMTP에 제공 할 수있는 발신 메일 서버 세부 정보를 제공합니다.
Net::SMTP.start('mail.your-domain.com')
이 코드 줄은 사용자 이름이나 비밀번호를 사용하지 않고 mail.your-domain.com의 포트 25에서 SMTP 서버에 연결합니다. 하지만 필요한 경우 포트 번호 및 기타 세부 정보를 지정할 수 있습니다. 예를 들면-
Net::SMTP.start('mail.your-domain.com',
25,
'localhost',
'username', 'password' :plain)
이 예는 일반 텍스트 형식의 사용자 이름과 비밀번호를 사용하여 mail.your-domain.com의 SMTP 서버에 연결합니다. 클라이언트의 호스트 이름을 localhost로 식별합니다.
Ruby를 사용하여 HTML 이메일 보내기
Ruby를 사용하여 문자 메시지를 보내면 모든 내용이 간단한 텍스트로 처리됩니다. 텍스트 메시지에 HTML 태그를 포함하더라도 간단한 텍스트로 표시되며 HTML 구문에 따라 HTML 태그 형식이 지정되지 않습니다. 하지만 Ruby Net :: SMTP는 HTML 메시지를 실제 HTML 메시지로 보내는 옵션을 제공합니다.
이메일 메시지를 보내는 동안 HTML 이메일을 보내기 위해 Mime 버전, 콘텐츠 유형 및 문자 집합을 지정할 수 있습니다.
예
다음은 HTML 콘텐츠를 이메일로 보내는 예입니다. 한 번 시도해보세요-
require 'net/smtp'
message = <<MESSAGE_END
From: Private Person <[email protected]>
To: A Test User <[email protected]>
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, '[email protected]', '[email protected]'
end
첨부 파일을 전자 메일로 보내기
혼합 콘텐츠가 포함 된 이메일을 보내려면 다음을 설정해야합니다. Content-type 헤더 multipart/mixed. 그런 다음 텍스트 및 첨부 파일 섹션을boundaries.
경계는 이메일의 메시지 부분에 나타날 수없는 고유 번호가 뒤 따르는 두 개의 하이픈으로 시작됩니다. 이메일의 마지막 섹션을 나타내는 마지막 경계도 두 개의 하이픈으로 끝나야합니다.
첨부 파일은 pack("m") 전송 전에 base64 인코딩을 갖는 함수.
예
다음은 파일을 보내는 예입니다. /tmp/test.txt 첨부 파일로.
require 'net/smtp'
filename = "/tmp/test.txt"
# Read a file and encode it into base64 format
filecontent = File.read(filename)
encodedcontent = [filecontent].pack("m") # base64
marker = "AUNIQUEMARKER"
body = <<EOF
This is a test email to send an attachement.
EOF
# Define the main headers.
part1 = <<EOF
From: Private Person <[email protected]>
To: A Test User <[email protected]>
Subject: Sending Attachement
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary = #{marker}
--#{marker}
EOF
# Define the message action
part2 = <<EOF
Content-Type: text/plain
Content-Transfer-Encoding:8bit
#{body}
--#{marker}
EOF
# Define the attachment section
part3 = <<EOF
Content-Type: multipart/mixed; name = \"#{filename}\"
Content-Transfer-Encoding:base64
Content-Disposition: attachment; filename = "#{filename}"
#{encodedcontent}
--#{marker}--
EOF
mailtext = part1 + part2 + part3
# Let's put our code in safe area
begin
Net::SMTP.start('localhost') do |smtp|
smtp.sendmail(mailtext, '[email protected]', ['[email protected]'])
end
rescue Exception => e
print "Exception occured: " + e
end
NOTE − 어레이 내에 여러 대상을 지정할 수 있지만 쉼표로 구분해야합니다.