国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院
日本国产在线| 国产成人福利| 伊人福利在线| 91午夜在线| 97视频在线观看网站| 91啦中文在线| 99在线欧洲视频| 亚洲xxxxxx| www在线视频观看| а√最新版在线天堂| 欧美日韩视频精品一区二区| 精品国产免费观看一区| 永久免费在线观看| 超碰免费97在线观看| 国产中文字幕在线观看| 黄网站在线观看高清免费| www.av在线播放| 国产秒拍福利视频露脸| 国产经典av| 欧美日韩久久中文字幕| 国产一卡2卡3卡免费网站| 18成年在线观看| 国自产拍在线网站网址视频| 国产美女高潮| 亚色视频在线观看| 国产福利小视频在线观看| 欧美日韩亚洲第一页| 在线中文字幕视频| 国产日韩欧美第一页| 开心婷婷激情| 在线中文免费视频| 免费女人毛片视频| 91看片在线观看| 国产免费电影网站入口| 伊人狠狠av| 国产精品国产国产aⅴ| 九九热在线视频观看| 伊人伊人av电影| 99视频资源网| 黄色毛片在线| 亚洲精品视频在线免费| 国产香蕉尹人视频在线| 欧美日韩性视频一区二区三区| 国产二区三区在线| 成人免费一区二区三区牛牛| 亚洲网站一区| 国产福利在线观看| 国产不卡视频| 91视频久色| 国产成人久久精品77777| 国产小视频免费在线网址| 快射av在线播放一区| www.色婷婷| 免费影视观看网站入口| 久久五月精品中文字幕| 国产理论电影在线观看| 中文字幕在线免费| 最近中文字幕大全中文字幕免费| 亚洲欧美日韩成人网| 在线久久视频| a视频在线看| 永久免费在线观看| 青青草原av在线| 懂色av一区| 中文字幕亚洲精品视频| 国产三级视频| aaa大片在线观看| av激情在线| 九九精品视频在线观看九九| 国产鲁鲁视频在线观看特色| 国产香蕉尹人视频在线| 99久久99久久免费精品小说| 四虎精品视频| 久久精品免视着国产成人| 国产三区四区在线观看| 99色在线观看| 不卡av免费观看| 最新中文字幕av专区| 亚洲妇熟xxxx妇色黄| 超碰在线国产| 51成人精品网站| 久热免费在线视频| 综合图区亚洲白拍在线| 中文av在线播放| 导航福利在线| 日本一级理论片在线大全| 最新av免费看| 超碰国产在线| 永久av在线| 国产日产一区二区三区| 四虎成人免费| 国产porny蝌蚪视频| 狂野欧美性猛交xxxx乱大交| 中文av在线播放| 中文字幕第一页在线| 免费在线超碰| h网址在线观看| 国产色在线 com| 大香伊人中文字幕精品| 九色在线网站| 欧美午夜电影一区二区三区| 性国产高清在线观看| 在线中文资源天堂| 精品亚洲综合| 精品久久九九| 91在线最新| 国产视频2区| 国产亚av手机在线观看| 九九热在线视频观看| 午夜在线观看91| 99精品老司机免费视频| 国产激情视频一区二区三区| 国产一级黄色大片| √天堂8资源中文在线| 中文字幕有码在线视频| 国产精品久久久久久久久鸭| 国产黄大片在线观看画质优化| 国产小视频免费在线网址| 国产网友自拍电影在线 | 92久久精品| 中文视频在线| 日日夜夜中文字幕| 久久99精品久久久久久野外| 中文字幕在线免费观看| 国产对白国语对白| 操操操综合网| 国产网站麻豆精品视频| 69国产精品视频| eeuss在线观看| 黄色片免费在线| 国产福利片在线| 人xxxx性xxxxx欧美| 天堂在线免费av| 精品国产一区二区三区久久久狼牙| 国产粉嫩一区二区三区在线观看| 亚洲综合在线网| 国产精品入口免费麻豆| 日本久久网站| 国产香蕉在线| 欧美性xxxx交| 在线看黄网站| 国产亚洲精品拍拍拍拍拍| 亚洲字幕成人中文在线观看| 日本中文字幕在线2020| 在线色视频网| 国产日韩网站| 久久久久久五月天久久久久久久久| 国产三级av在线| 在线观看国产视频| 国产麻豆综合视频在线观看| 夜色资源网av在先锋网站观看| 国产麻豆综合视频在线观看| 亚洲永久免费网站| 国产成人亚洲综合小说区| 国产蜜臀av在线播放| 午夜影院在线免费观看| 精品女厕厕露p撒尿| 国产区在线看| 天堂中文字幕在线| eeuss影院www在线观看| 午夜小视频在线| 亚洲精品男人| 四虎中文字幕| 免费看黄视频网站| 日本三级在线视频| www.色婷婷| 国产中文字幕网| 国产女呦网站| 国产主播色在线| 久久久久久久久久久久网站| 天天操夜夜做| wwww亚洲| 超碰国产在线| 国产蜜臀av在线播放| 最新黄网在线观看| 国产激情在线| 国产激情视频一区二区| 69国产精品| 日本在线观看网站| 黄色三级视频在线观看| 国产美女视频一区二区二三区| 国产一区二区三区福利| 2019年中文字幕| 欧美日韩视频精品一区二区| 国产一区在线视频观看| 国产精品理人伦一区二区三区 | 国产三级视频在线看| 国产www在线观看| 天天干天天摸| 中文字幕国产在线| 亚洲精品影院在线| 国产一卡2卡3卡免费网站| 2018中文字幕在线| 九九热在线视频免费观看| 国产黄网站在线观看| 欧美aaa一级片| 国产调教视频在线观看| av手机天堂| 国产精品理人伦一区二区三区| wwwww在线观看免费视频|