国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

腳本之家,腳本語(yǔ)言編程技術(shù)及教程分享平臺(tái)!
分類導(dǎo)航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務(wù)器之家 - 腳本之家 - Ruby - Ruby實(shí)現(xiàn)發(fā)送郵件的兩個(gè)方法

Ruby實(shí)現(xiàn)發(fā)送郵件的兩個(gè)方法

2020-04-21 10:26腳本之家 Ruby

這篇文章主要介紹了Ruby實(shí)現(xiàn)發(fā)送郵件的兩個(gè)方法,本文講解了使用Net::SMTP、使用ruby gem:mail兩種方法實(shí)現(xiàn)郵件發(fā)送,需要的朋友可以參考下

其實(shí)只要你任性的可以,用telnet也是可以發(fā)郵件的哦。不過本貓沒那么任性,還是用KISS原則來(lái)發(fā)郵件吧。本篇博文只介紹了如何發(fā)郵件,但沒涉及收郵件的事,以后如有機(jī)會(huì)會(huì)單獨(dú)開一篇博文介紹。

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

方法一:使用Net::SMTP

正常的非加密連接的smtp端口號(hào)為25,如果是加密則可能為587或465,要看具體的郵件服務(wù)器的說明。開始用的是QQ的郵件服務(wù)器,但老是不穩(wěn)定,遂換為hotmail的,但hotmail需要ssl連接。按上面所述需要openssl包。麻煩開始了:rubygems.org用gem死活連不上,后來(lái)將openssl.gem直接下載到本地,用gem install -l openssl.gem安裝,發(fā)現(xiàn)require還是出錯(cuò),需要native ext:openssl.so動(dòng)態(tài)庫(kù)擴(kuò)展,進(jìn)入openssl的ext源代碼目錄用make編譯提示出錯(cuò):Ignore OpenSSL broken by Apple,提示我用其他的openssl庫(kù)路徑,我用毛啊!是不支持Mac OS X嗎?但是檢查了系統(tǒng)中是安裝過openssl的:

 

復(fù)制代碼 代碼如下:

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

 

動(dòng)態(tài)庫(kù)也是存在的,但不是ruby 的c_ext!

 

復(fù)制代碼 代碼如下:

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對(duì)ruby的問題(見我另一篇在mac OS X下ruby使用tk的博文),我懷疑該ruby版本本身不支持原生openssl,這個(gè)版本是我在ruby-lang下載的ruby-2.1.5源代碼編譯并且安裝的!遂用rvm下載了其ruby-2.1.5版本,一試竟然可以鳥!但隨后發(fā)現(xiàn)hotmail.com的加密連接還是連不上,又換回QQ郵箱,用非加密的smtp,25端口連接。這回基本可以穩(wěn)定發(fā)送了,如果換位163的郵箱測(cè)試發(fā)現(xiàn)更加穩(wěn)定,上未重構(gòu)的代碼:

 

復(fù)制代碼 代碼如下:

#!/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對(duì)ruby的問題(見我另一篇在mac OS X下ruby使用tk的博文),我懷疑該ruby版本本身不支持原生openssl,這個(gè)版本是我在ruby-lang下載的ruby-2.1.5源代碼編譯并且安裝的!遂用rvm下載了其ruby-2.1.5版本,一試竟然可以鳥!但隨后發(fā)現(xiàn)hotmail.com的加密連接還是連不上,又換回QQ郵箱,用非加密的smtp,25端口連接。這回基本可以穩(wěn)定發(fā)送了,如果換位163的郵箱測(cè)試發(fā)現(xiàn)更加穩(wěn)定,上未重構(gòu)的代碼:

 

復(fù)制代碼 代碼如下:

#!/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

 

 

復(fù)制代碼 代碼如下:

#如果使用mailfactory發(fā)送則實(shí)際用不著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"))   #發(fā)送附件

#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(未完待續(xù))

mail是一個(gè)比較高級(jí)的郵件庫(kù),包含了發(fā)送附件的功能。不過下載下來(lái)本地安裝后開始報(bào)錯(cuò)提示refuse port 25之類的錯(cuò)誤。開始我以為是權(quán)限不夠,用sudo執(zhí)行后,發(fā)現(xiàn)在執(zhí)行require 'mail'命令時(shí)又報(bào)錯(cuò)!發(fā)現(xiàn)當(dāng)初安裝時(shí)未以sudo權(quán)限安裝,先gem uninstall mail.gem,然后重新安裝:sudo gem install mail.gem,此時(shí)在sudo和普通權(quán)限下require 'mail'都正常鳥:

復(fù)制代碼 代碼如下:

#!/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!

 

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

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

延伸 · 閱讀

精彩推薦
  • RubyRuby設(shè)計(jì)模式編程中使用Builder建造者模式的實(shí)例

    Ruby設(shè)計(jì)模式編程中使用Builder建造者模式的實(shí)例

    這篇文章主要介紹了Ruby設(shè)計(jì)模式編程中使用Builder建造者模式的實(shí)例,建造者模式將一個(gè)復(fù)雜對(duì)象的構(gòu)造與它的表示分離,使同樣的構(gòu)建過程可以創(chuàng)建不同的表...

    范孝鵬2192020-05-07
  • RubyRuby進(jìn)行文件信息輸出實(shí)例代碼

    Ruby進(jìn)行文件信息輸出實(shí)例代碼

    Ruby進(jìn)行文件信息輸出實(shí)例代碼,數(shù)據(jù)是隨機(jī)的,所以每次的記錄都會(huì)不同。 ...

    ruby教程網(wǎng)2962020-04-10
  • RubyRuby簡(jiǎn)潔學(xué)習(xí)筆記(一):字符串、數(shù)字、類和對(duì)象

    Ruby簡(jiǎn)潔學(xué)習(xí)筆記(一):字符串、數(shù)字、類和對(duì)象

    這篇文章主要介紹了Ruby簡(jiǎn)潔學(xué)習(xí)筆記(一):字符串、數(shù)字、類和對(duì)象,本文是學(xué)習(xí)筆記第一篇,需要的朋友可以參考下 ...

    腳本之家2472020-04-20
  • Ruby剖析 Ruby 訪問控制

    剖析 Ruby 訪問控制

    前面,我們說 Ruby 沒有函數(shù),只有方法.而且實(shí)際上有不止一種方法.這一節(jié)我們介紹 訪問控制 (accesscontrols). 想想當(dāng)我們?cè)谧罡邔佣皇窃谝粋€(gè)類的定義里定義...

    ruby教程網(wǎng)3572020-04-08
  • Ruby簡(jiǎn)要說明Ruby中的迭代器

    簡(jiǎn)要說明Ruby中的迭代器

    這篇文章主要介紹了Ruby中的迭代器,迭代器的概念在動(dòng)態(tài)語(yǔ)言的編程中十分重要,文章中介紹了Ruby中的each迭代器和collect迭代器,需要的朋友可以參考下 ...

    goldensun2772020-04-25
  • RubyRuby迭代器的7種技巧分享

    Ruby迭代器的7種技巧分享

    這篇文章主要介紹了Ruby迭代器的7種技巧分享,Ruby中的迭代器非常人性化,本文既是講解了7個(gè)技巧也是講解了7種迭代器,需要的朋友可以參考下 ...

    腳本之家4782020-04-20
  • RubyCentOS中配置Ruby on Rails環(huán)境

    CentOS中配置Ruby on Rails環(huán)境

    經(jīng)過一個(gè)上午的折騰,終于把ROR環(huán)境在CentOS中搞定,繞了很多彎路,把文章寫下來(lái)總結(jié)一下 ...

    可樂加糖4762020-04-12
  • RubyRuby環(huán)境下安裝使用bundler來(lái)管理多版本的gem

    Ruby環(huán)境下安裝使用bundler來(lái)管理多版本的gem

    這篇文章主要介紹了Ruby環(huán)境下安裝使用bundler來(lái)管理多版本的gem的方法,舉了Ruby On Rails中的應(yīng)用實(shí)例來(lái)進(jìn)行演示,需要的朋友可以參考下 ...

    日拱一卒4332020-05-10
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 国精品一区二区三区 | 黄色国产 | 在线成人免费 | 亚洲lesbianxxxxhd| 午夜影院 | 国产欧美在线 | 久久情侣视频 | 依人在线免费视频 | 午夜精品福利在线观看 | 亚洲国产成人久久 | a欧美| 国产婷婷精品av在线 | 亚洲影视一区 | 在线成人国产 | 一级a毛片 | 亚洲在线一区二区 | 国产成人在线视频 | 久久久国产一区二区三区四区小说 | 久草中文在线 | 国产一区二区精品 | 91精品国产综合久久福利软件 | 欧美亚洲国产激情 | 日韩中文字幕在线播放 | 久久久久中文字幕 | 久久亚洲欧美日韩精品专区 | 日韩影音| 亚洲欧美日韩精品久久亚洲区 | 97久久精品人人澡人人爽 | 久久亚洲国产精品日日av夜夜 | 夜夜爽99久久国产综合精品女不卡 | 久久2 | 午夜精品久久久久久久久 | 精品视频在线免费观看 | 精彩毛片 | 免费观看一级毛片 | 久久精品国产久精国产 | av永久| 国产亚洲精品久久久久动 | 亚洲少妇视频 | 黄色电影在线免费观看 | 精品视频一区二区 |