최고의 루비는 메일을 보내는 - SMTP를 튜토리얼 2024년, 이 튜토리얼에서는 루비와 HTML 이메일 보내기,첨부 파일이있는 메일 보내기,를 배울 수 있습니다.
단순 메일 전송 프로토콜이 전송 방식을 글자를 제어하는 목적으로 소스에서 메시지를 전송하기위한 규칙들의 집합이다 SMTP (단순 메일 전송 프로토콜).
루비는 인터넷 :: SMTP 메일을 보낼를 제공하고,이 방법과 새로운 시작을 제공합니다 :
새로운 방법은 두 가지 매개 변수가 있습니다 :
시작 방법은 다음과 같은 매개 변수가 있습니다 :
SMTP 객체 인스턴스화 방법은 센드 메일, 다음 매개 변수를 호출
다음은 메일을 보낼 수있는 간단한 루비 스크립트를 제공합니다 :
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위의 예에서, 정확한 표기 형식에 주목 기본적인 전자 메일 메시지를 설정하고있다. 하고, 주제 사이에 텍스트와 헤더 정보는 빈 줄을 필요로에서 전자 메일이 될 수 있습니다.
받는 사람 메일 메시지를 보낸 사람에 대한 send_message 프로세스를 사용하여 메시지, 공정 파라미터를 보낼 로컬 컴퓨터에서 SMTP 서버에 연결하기 위해 인터넷 :: SMTP를 사용합니다.
당신이 기계의 SMTP 서버에서 실행하지 않는 경우 원격 SMTP 서버와 인터넷 :: SMTP 통신을 사용할 수 있습니다. (예 : 핫메일이나 야후 메일 등) 웹 메일 서비스를 사용하는 경우, 이메일 공급자가 당신에게 보내는 메일 서버의 세부 사항을 제공합니다 :
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)에 연결하기 위해 사용자 이름과 암호를 사용합니다.
넷 :: SMTP는 HTML 형식의 메시지를 송신하기위한 지원을 제공한다.
전자 메일을 보낼 때 당신은 MIME 버전, 문서 유형, HTML 형식으로 메시지를 보내도록 설정 문자를 설정할 수 있습니다.
하기 실시 예는 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
전자 메일의 혼합 내용을 전송해야하는 경우 콘텐츠 형식이 혼합 / 멀티입니다 설정해야합니다. 그래서 당신은 메시지 내용에 첨부 파일을 추가 할 수 있습니다.
전송하기 전에 액세서리를 사용하는 팩 ( "m") 함수는 base64로 형식으로 내용을 변환이 필요합니다.
다음의 예는 /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
참고 : 변속기의 복수의 주소를 지정하지만, 쉼표의 사용을 필요로 할 수있다.