我已经将pop邮件用于ruby(net / pop)
我遇到的问题是某些电子邮件是HTML格式的,有没有办法指明我想要纯文本?
谢谢,Alex
答案 0 :(得分:2)
电子邮件可以采用不同的格式。最常见的是MIME,它允许电子邮件包含多个“部分”。通常是HTML和纯文本部分。但是,您无法控制电子邮件实际包含的部分。由于显而易见的原因,这只能是发件人。
但是,如果存在纯文本部分,则可以使用ruby来获取纯文本部分,或者尝试从HTML部分生成一些纯文本部分。
以下简要示例来获取电子邮件的纯文本部分来自Redmine的MailHandler model和POP3 module(根据GPLv2许可)。
def plain_text_body(email)
parts = email.parts.collect {|c| (c.respond_to?(:parts) && !c.parts.empty?) ? c.parts : c}.flatten
if parts.empty?
parts << email
end
plain_text_part = parts.detect {|p| p.content_type == 'text/plain'}
if plain_text_part.nil?
# no text/plain part found, assuming html-only email
# strip html tags and remove doctype directive
plain_text_body = strip_tags(email.body.to_s)
plain_text_body.gsub! %r{^<!DOCTYPE .*$}, ''
else
plain_text_body = plain_text_part.body.to_s
end
plain_text_body.strip
end
pop = Net::POP3.APOP(true).new(host,port)
pop.start(username, password) do |pop_session|
if pop_session.mails.empty?
puts "No email to process"
else
puts "#{pop_session.mails.size} email(s) to process..."
pop_session.each_mail do |msg|
message = msg.pop
plain_text = plain_text_body(message)
#
# Now do something with the plain text body
#
end
end
end