亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Ruby > 正文

Ruby實現發送郵件的兩個方法

2020-10-29 19:42:49
字體:
來源:轉載
供稿:網友

其實只要你任性的可以,用telnet也是可以發郵件的哦。不過本貓沒那么任性,還是用KISS原則來發郵件吧。本篇博文只介紹了如何發郵件,但沒涉及收郵件的事,以后如有機會會單獨開一篇博文介紹。

Ruby通過smtp發郵件有2種操作手段,一是直接用Net::SMTP來發送,比較底層。如果還要發送附件,則需要額外gem:mailfactory,而mailfactory又依賴于包mime-types。即便如此如果郵件服務器連接需要ssl,則還需要require文件smtp-tls.rb,而這個rb文件需要openssl包的支持啊!第二種方法是直接使用高層的gem包mail,包含添加附件的功能,不過該gem也依賴于mime-types包,這個包專門用來描述郵件文件格式的,俗稱多用途互聯網郵件擴展類型啊。下面依次介紹下每種方法。

方法一:使用Net::SMTP

正常的非加密連接的smtp端口號為25,如果是加密則可能為587或465,要看具體的郵件服務器的說明。開始用的是QQ的郵件服務器,但老是不穩定,遂換為hotmail的,但hotmail需要ssl連接。按上面所述需要openssl包。麻煩開始了:rubygems.org用gem死活連不上,后來將openssl.gem直接下載到本地,用gem install -l openssl.gem安裝,發現require還是出錯,需要native ext:openssl.so動態庫擴展,進入openssl的ext源代碼目錄用make編譯提示出錯:Ignore OpenSSL broken by Apple,提示我用其他的openssl庫路徑,我用毛?。∈遣恢С諱ac OS X嗎?但是檢查了系統中是安裝過openssl的:

復制代碼 代碼如下:

/private/etc/openssl
/private/etc/openssl/cert.pem
/usr/bin/openssl
/usr/lib/pkgconfig/openssl.pc
/usr/local/Cellar/openssl

動態庫也是存在的,但不是ruby 的c_ext!

復制代碼 代碼如下:

apple@kissAir: ruby_src$locate libssl.dylib
/Applications/Xcode6-Beta4.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/lib/libssl.dylib
/Applications/Xcode6-Beta4.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/lib/libssl.dylib
/opt/com.bitaxis/lib/libssl.dylib
/opt/local/lib/libssl.dylib
/usr/lib/libssl.dylib
/usr/local/Cellar/openssl/1.0.1e/lib/libssl.dylib

神馬情況?考慮到tk對ruby的問題(見我另一篇在mac OS X下ruby使用tk的博文),我懷疑該ruby版本本身不支持原生openssl,這個版本是我在ruby-lang下載的ruby-2.1.5源代碼編譯并且安裝的!遂用rvm下載了其ruby-2.1.5版本,一試竟然可以鳥!但隨后發現hotmail.com的加密連接還是連不上,又換回QQ郵箱,用非加密的smtp,25端口連接。這回基本可以穩定發送了,如果換位163的郵箱測試發現更加穩定,上未重構的代碼:

復制代碼 代碼如下:

#!/usr/bin/ruby
#encoding:utf-8

require 'net/smtp'
require './smtp-tls.rb'
require 'mailfactory'

#Senders and Recipients
from_name = 'localhost'
from_mail = '12345678@qq.com'
to_name = 'ks'
to_mail = '88888888@qq.com'

#Servers and Authentication
#smtp_host   = 'smtp.qq.com'
smtp_host = 'smtp.163.com'
smtp_port   =  25 #465 587 25
#smtp_domain = 'qq.com'
smtp_domain  = 'localhost.localdomain'
smtp_user = "wangyi@163.com"
smtp_pwd = "xxxxxxxx"
#smtp_user   = "12345678@qq.com"
#smtp_pwd    = 'xxxxxxxx'

#The subject and the message
t = Time.now
subj = '1331 thinkpad test hopy'
msg_body = "send msg from ruby./n"

#The date/time should look something like: Thu, 03 Jan 2006 12:33:22 -0700
msg_date = t.strftime("%a, %d %b %Y %H:%M:%S +0800")

#Compose the message for the email

神馬情況?考慮到tk對ruby的問題(見我另一篇在mac OS X下ruby使用tk的博文),我懷疑該ruby版本本身不支持原生openssl,這個版本是我在ruby-lang下載的ruby-2.1.5源代碼編譯并且安裝的!遂用rvm下載了其ruby-2.1.5版本,一試竟然可以鳥!但隨后發現hotmail.com的加密連接還是連不上,又換回QQ郵箱,用非加密的smtp,25端口連接。這回基本可以穩定發送了,如果換位163的郵箱測試發現更加穩定,上未重構的代碼:

復制代碼 代碼如下:

#!/usr/bin/ruby
#encoding:utf-8

require 'net/smtp'
require './smtp-tls.rb'
require 'mailfactory'

#Senders and Recipients
from_name = 'localhost'
from_mail = '12345678@qq.com'
to_name = 'ks'
to_mail = '88888888@qq.com'

#Servers and Authentication
#smtp_host   = 'smtp.qq.com'
smtp_host = 'smtp.163.com'
smtp_port   =  25 #465 587 25
#smtp_domain = 'qq.com'
smtp_domain  = 'localhost.localdomain'
smtp_user = "wangyi@163.com"
smtp_pwd = "xxxxxxxx"
#smtp_user   = "12345678@qq.com"
#smtp_pwd    = 'xxxxxxxx'

#The subject and the message
t = Time.now
subj = '1331 thinkpad test hopy'
msg_body = "send msg from ruby./n"

#The date/time should look something like: Thu, 03 Jan 2006 12:33:22 -0700
msg_date = t.strftime("%a, %d %b %Y %H:%M:%S +0800")

#Compose the message for the email

復制代碼 代碼如下:

#如果使用mailfactory發送則實際用不著msg格式了
msg = <<END_OF_MESSAGE
Date: #{msg_date}
From: #{from_name} <#{from_mail}>
To: #{to_name} <#{to_mail}>
Subject: #{subj}

#{msg_body}
END_OF_MESSAGE

mail = MailFactory.new
mail.to = to_mail
mail.from = from_mail
mail.subject = subj
mail.text = msg_body
mail.attach(File.expand_path("./mail.rb"))   #發送附件

#smtp = Net::SMTP.new(smtp_host,587)
#smtp.enable_starttls
#Net::SMTP.start(smtp_host, smtp_port, smtp_domain, smtp_user, smtp_pwd, :plain) do |smtp|
Net::SMTP.start(smtp_host,smtp_port,smtp_domain, smtp_user, smtp_pwd, :login) do |smtp| 
  #smtp.send_message msg, smtp_user, to_mail
  #mail.to = to_mail
  #puts smtp.methods
  #smtp.enable_starttls
  smtp.send_message(mail.to_s,smtp_user,to_mail)
end

方法二:使用ruby gem:mail(未完待續)

mail是一個比較高級的郵件庫,包含了發送附件的功能。不過下載下來本地安裝后開始報錯提示refuse port 25之類的錯誤。開始我以為是權限不夠,用sudo執行后,發現在執行require 'mail'命令時又報錯!發現當初安裝時未以sudo權限安裝,先gem uninstall mail.gem,然后重新安裝:sudo gem install mail.gem,此時在sudo和普通權限下require 'mail'都正常鳥:

復制代碼 代碼如下:

#!/usr/bin/ruby

require 'mail'

smtp = { :address => 'smtp.163.com', :port => 25, :domain => '163.com', /
 :user_name => 'wangyi@163.com', :password => 'xxxxxxxx',/
 :enable_starttls_auto => true, :openssl_verify_mode => 'none' }
Mail.defaults { delivery_method :smtp, smtp }
mail = Mail.new do
  from 'wangyi@163.com'
  to '12345678@qq.com'
  subject 'test mail'
  body 'body:hello send mail way 2 :)'
  add_file File.expand_path("./mail2.rb")
end
mail.deliver!

有一個小問題,就是開始smtp中user_name和from里設置的發送郵件賬戶不一樣,導致老是發送失敗,這里都改成wangyi@163.com就可以了。但在方法一中可以不一樣哦。還有2種方法中domain改成'localhost‘等其他值也能發送成功,好像沒啥關系。

最后要說的是,2種方法都是用的非加密的方式連接,即郵件服務器允許非ssl方式連接,如果郵件服務器只能加密連接上面代碼就不能用。至于這時該如何寫代碼,若知道的各位童鞋請不吝賜教哦。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产婷婷成人久久av免费高清| 欧美日韩国产中文字幕| 国产99久久精品一区二区 夜夜躁日日躁| 亚洲综合在线做性| 国产精品久久久久久久电影| 久久久久久久久国产精品| 日本高清+成人网在线观看| 美女少妇精品视频| 成人免费视频97| 久久久精品国产一区二区| 亚洲日本成人女熟在线观看| 亚洲精品久久久久久久久久久久久| 国产精品视频最多的网站| 亚洲在线观看视频| 91九色国产社区在线观看| 国产视频亚洲视频| 欧美极品欧美精品欧美视频| 国产精品亚洲第一区| 国产日韩欧美在线看| 国产精品热视频| 色噜噜久久综合伊人一本| 亚洲欧美日韩一区二区三区在线| 2018国产精品视频| 国产美女久久久| 午夜精品视频在线| 亚洲欧美日韩在线一区| 97在线看福利| 亚洲成人黄色网| 久久亚洲欧美日韩精品专区| 国产一区二区在线免费视频| 乱亲女秽乱长久久久| 日韩在线观看高清| 91夜夜未满十八勿入爽爽影院| 久久久成人精品视频| 7777免费精品视频| 亚洲欧美日韩天堂一区二区| 成人乱色短篇合集| 色琪琪综合男人的天堂aⅴ视频| 国产精品678| 欧美日韩不卡合集视频| 91精品国产91久久久久久久久| 国产成人一区二区| 一级做a爰片久久毛片美女图片| 日本视频久久久| 国产精品网站入口| 日本一区二区三区在线播放| 国产精品高潮粉嫩av| 日本欧美黄网站| 丁香五六月婷婷久久激情| 亚洲一区二区福利| 欧美成人精品影院| 欧美激情在线观看| 国产成人精品久久二区二区91| 国产精品成人免费电影| 亚洲91精品在线观看| 亚洲国产精品电影在线观看| 自拍偷拍亚洲欧美| 亚洲国产毛片完整版| 成人免费xxxxx在线观看| 奇门遁甲1982国语版免费观看高清| 亚洲影视九九影院在线观看| 亚洲色图五月天| 亚洲国产成人精品久久久国产成人一区| 国产69精品久久久久9| 欧美在线免费看| 亚洲国产又黄又爽女人高潮的| 黄色一区二区三区| 日韩在线视频网站| 亚洲视频777| 日韩精品在线视频观看| 欧美精品在线网站| 一区二区三区视频在线| 久久手机免费视频| 日韩在线视频播放| 亚洲最大成人免费视频| 日韩影视在线观看| 免费91在线视频| 久久精品国产成人| 成人免费高清完整版在线观看| 91中文字幕在线观看| 国产女同一区二区| 日韩免费在线电影| 国外成人在线视频| 久久青草精品视频免费观看| 国产精品视频999| 欧美日韩免费一区| 欧美成人在线免费| 91极品视频在线| 亚洲视频自拍偷拍| 久久亚洲国产精品| 国产91ⅴ在线精品免费观看| 日韩国产欧美区| 尤物yw午夜国产精品视频明星| 欧美又大又粗又长| 欧美视频在线观看免费网址| 国产精品视频区1| 亚洲午夜未删减在线观看| 91免费看片网站| 精品一区二区三区四区| 日韩有码片在线观看| 中文字幕日韩在线观看| 日韩在线观看免费全集电视剧网站| 国产精品中文在线| 国产精品一区二区三区在线播放| 992tv成人免费视频| 国产精品网站视频| 亚洲精品720p| 精品国产一区久久久| 亚洲欧美在线免费| 国产精品久久精品| 国产成人在线一区二区| 免费99精品国产自在在线| 欧美第一淫aaasss性| 亚洲精品一区久久久久久| 奇门遁甲1982国语版免费观看高清| 欧美中文字幕在线观看| 久久免费少妇高潮久久精品99| 亚洲一区二区三区香蕉| 国产精品一区二区三区免费视频| 97精品一区二区三区| 91久久久在线| 欧美激情免费在线| 亚洲午夜久久久影院| 精品久久久久久久久久久久久久| 奇米影视亚洲狠狠色| 伊人av综合网| 亚洲欧美日韩区| 亚洲欧美一区二区三区在线| 国产免费一区二区三区在线能观看| 国产精品黄色av| 狠狠做深爱婷婷久久综合一区| 国产精品大片wwwwww| 日韩三级影视基地| 青草青草久热精品视频在线观看| 国产精品一二三在线| 欧美综合在线观看| 国产日韩在线播放| 国产精品久久久久不卡| 国产精品久久久久91| 色综合91久久精品中文字幕| 亚洲第一视频在线观看| 久久久电影免费观看完整版| 国产精品一区专区欧美日韩| 国产精品一区二区三区成人| 国语自产精品视频在线看一大j8| 成人在线视频网站| 亚洲高清av在线| 中文字幕亚洲国产| 亚洲午夜久久久久久久| 日韩高清电影免费观看完整版| 欧美日韩中文字幕在线| 韩国日本不卡在线| 日韩中文在线中文网在线观看| 午夜精品蜜臀一区二区三区免费| 久久久久久久久久久国产| 亚洲性av在线| 在线观看国产精品91| 亚洲第一av在线| 欧美午夜精品在线| 一本色道久久综合狠狠躁篇的优点| 欧美日韩亚洲一区二区三区| 久国内精品在线| 欧美大肥婆大肥bbbbb| 亚洲人成在线观看网站高清|