Latest web development tutorials

루비는 메일을 보내는 - SMTP를

단순 메일 전송 프로토콜이 전송 방식을 글자를 제어하는 ​​목적으로 소스에서 메시지를 전송하기위한 규칙들의 집합이다 SMTP (단순 메일 전송 프로토콜).

루비는 인터넷 :: SMTP 메일을 보낼를 제공하고,이 방법과 새로운 시작을 제공합니다 :

새로운 방법은 두 가지 매개 변수가 있습니다 :

  • 기본서버 이름은localhost입니다
  • 기본 포트 번호는25

시작 방법은 다음과 같은 매개 변수가 있습니다 :

  • 서버 - SMTP 서버의IP는 기본은 localhost입니다
  • 포트 -포트 번호, 기본값은 25입니다
  • 도메인 -메일 보낸 사람 도메인 기본 ENV [ "HOSTNAME"]
  • 계정 -사용자 이름, 기본값은 전무하다
  • 암호 -사용자의 암호, 기본은 전무하다
  • authType이 -인증 유형은 기본적으로cram_md5입니다

SMTP 객체 인스턴스화 방법은 센드 메일, 다음 매개 변수를 호출

  • 소스 -반환에 언제든지 문자열 또는 각 반복 또는 아무것도의 배열입니다.
  • 보낸 사람 -이메일 필드의 형태로 나타나는 문자열입니다.
  • 받는 사람 -문자열이나받는 사람의 주소를 나타내는 문자열의 배열입니다.

다음은 메일을 보낼 수있는 간단한 루비 스크립트를 제공합니다 :

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

위의 예에서, 정확한 표기 형식에 주목 기본적인 전자 메일 메시지를 설정하고있다. 하고, 주제 사이에 텍스트와 헤더 정보는 빈 줄을 필요로에서 전자 메일이 될 수 있습니다.

받는 사람 메일 메시지를 보낸 사람에 대한 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)에 연결하기 위해 사용자 이름과 암호를 사용합니다.


루비와 HTML 이메일 보내기

넷 :: SMTP는 HTML 형식의 메시지를 송신하기위한 지원을 제공한다.

전자 메일을 보낼 때 당신은 MIME 버전, 문서 유형, HTML 형식으로 메시지를 보내도록 설정 문자를 설정할 수 있습니다.

하기 실시 예는 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

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

전자 메일의 혼합 내용을 전송해야하는 경우 콘텐츠 형식이 혼합 / 멀티입니다 설정해야합니다. 그래서 당신은 메시지 내용에 첨부 파일을 추가 할 수 있습니다.

전송하기 전에 액세서리를 사용하는 팩 ( "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 <[email protected]>
To: A Test User <[email protected]>
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, '[email protected]',
                          ['[email protected]'])
  end
rescue Exception => e  
  print "Exception occured: " + e  
end  

참고 : 변속기의 복수의 주소를 지정하지만, 쉼표의 사용을 필요로 할 수있다.