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

首頁 > 編程 > Ruby > 正文

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

2020-02-24 15:39:47
字體:
來源:轉載
供稿:網友

郵件傳輸協議是一組規則,用于將郵件從源地址發送到目標地址,它可以控制郵件的傳輸模式,有需要的朋友們進入下文了解下Ruby實現發送郵件的兩個方法吧!

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庫路徑,我用毛啊!是不支持Mac 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方式連接,如果郵件服務器只能加密連接上面代碼就不能用。至于這時該如何寫代碼,若知道的各位童鞋請不吝賜教哦。

最后,這兩種方法都是以未加密的方式連接的,即郵件服務器允許非SSL連接,如果郵件服務器只能加密上面的連接代碼,則不能使用。如果你了解這些知識,希望您給武林技術頻道小編留言,大家相互學習,相互進步!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩h在线观看| 国产精品久久久久久久久粉嫩av| 日韩av网站大全| 欧美孕妇与黑人孕交| 久久久精品国产一区二区| 国产精品18久久久久久麻辣| 亚洲电影免费观看高清完整版在线观看| 日韩av一区二区在线| 国产精品一二三视频| 亚洲精品国产精品国产自| 草民午夜欧美限制a级福利片| 亚洲精品之草原avav久久| 国产91色在线免费| 欧美亚洲成人xxx| 亚洲精品国精品久久99热| 欧美高清视频在线观看| 午夜精品在线观看| 成人av色在线观看| 亚洲精品乱码久久久久久按摩观| 91网站免费看| 精品毛片三在线观看| 日韩av影视综合网| 色偷偷偷亚洲综合网另类| 国产日韩欧美夫妻视频在线观看| 尤物yw午夜国产精品视频| 欧美日韩亚洲精品一区二区三区| 麻豆国产va免费精品高清在线| 国产乱人伦真实精品视频| 久久中文字幕在线视频| 揄拍成人国产精品视频| 欧美亚洲国产另类| 亚洲精品电影网| 欧美老女人在线视频| 日韩av电影国产| 精品国产1区2区| 亚洲男人天堂手机在线| 色偷偷88888欧美精品久久久| 欧美激情中文字幕在线| 国内精品免费午夜毛片| 精品中文字幕久久久久久| 国产精品日韩在线播放| 国内精品一区二区三区四区| 国产性猛交xxxx免费看久久| 国产日韩精品一区二区| 最新69国产成人精品视频免费| 欧美性猛交xxxx免费看| 成人乱人伦精品视频在线观看| 亚洲电影免费观看高清完整版在线观看| 最近的2019中文字幕免费一页| 欧美在线视频免费观看| 国产精品欧美一区二区三区奶水| 亚洲国产精品久久精品怡红院| 日韩免费不卡av| 亚洲午夜未删减在线观看| 国产日产欧美a一级在线| 91久久久亚洲精品| 成人激情视频小说免费下载| 亚洲第一色中文字幕| 日韩在线视频网| 成人在线免费观看视视频| 成人免费高清完整版在线观看| 亚洲变态欧美另类捆绑| 欧美午夜精品久久久久久浪潮| 亚洲肉体裸体xxxx137| 欧美另类极品videosbestfree| 成人中文字幕+乱码+中文字幕| 国产丝袜高跟一区| 国产成人涩涩涩视频在线观看| www.精品av.com| 91手机视频在线观看| 国产精品久久久久77777| 亚洲精品v天堂中文字幕| 中文字幕亚洲综合| 亚洲第一偷拍网| 日韩av网站大全| 日韩性生活视频| 亚洲国产一区自拍| 青青草原一区二区| 91av国产在线| 欧美最顶级丰满的aⅴ艳星| 国产成人在线一区二区| 欧美激情视频一区二区三区不卡| 久久亚洲精品视频| 欧美高清理论片| 国产欧美精品一区二区三区-老狼| 成人免费观看a| 欧洲美女7788成人免费视频| 欧美高清激情视频| 成人免费视频a| 久久久亚洲国产天美传媒修理工| 中文字幕不卡在线视频极品| 久久久视频精品| 这里只有精品在线观看| 日韩在线欧美在线| 精品福利视频导航| 国产成人97精品免费看片| 久久成年人免费电影| 亚洲理论在线a中文字幕| 亚洲影视九九影院在线观看| 精品国产成人av| 日韩av中文字幕在线免费观看| 在线成人激情视频| 色综合五月天导航| 亚洲综合色av| 亚洲午夜国产成人av电影男同| zzjj国产精品一区二区| 热久久99这里有精品| 久久免费在线观看| 中日韩美女免费视频网址在线观看| 欧美另类99xxxxx| 亚洲嫩模很污视频| 精品国产一区二区三区久久久| 91精品综合视频| 97精品欧美一区二区三区| 精品国产精品三级精品av网址| **欧美日韩vr在线| 国产美女久久久| 欧美丰满片xxx777| 欧美一级淫片播放口| 久久天天躁狠狠躁老女人| 亚洲日本欧美日韩高观看| 欧美二区在线播放| 91高清视频免费| 国产精品9999| 久久精品国产亚洲精品| 日韩免费中文字幕| 久久国产色av| 国产精品羞羞答答| 国产91精品久| 亚洲日本欧美日韩高观看| 尤物九九久久国产精品的特点| 国产精品美女网站| 久久亚洲国产成人| 国产精品欧美激情| 91精品免费久久久久久久久| 中文字幕不卡av| 亚洲人成77777在线观看网| 日韩精品免费综合视频在线播放| 亚洲石原莉奈一区二区在线观看| 久久精品中文字幕一区| 欧美激情视频网| 亚洲欧美精品中文字幕在线| 国产精品久久久久久久久久久久久| 夜夜嗨av色一区二区不卡| 青青草原一区二区| 欧美高清激情视频| 国产精品免费一区| 欧美日韩国产色视频| 国产香蕉精品视频一区二区三区| 日本精品免费一区二区三区| 国产亚洲成精品久久| 日韩www在线| 欧美性20hd另类| 免费91麻豆精品国产自产在线观看| 亚洲大胆美女视频| 欧美日韩精品中文字幕| 亚洲一区二区三区四区在线播放| 久久电影一区二区| 成人欧美一区二区三区黑人| 亚洲三级黄色在线观看| 中文字幕欧美日韩va免费视频| 91久久在线播放| 欧美老妇交乱视频| 亚洲欧洲一区二区三区在线观看|