BrData faz com que os emails cheguem com data 31/12/1969
Closed this issue · 3 comments
reinaldomendes commented
O Código listado abaixo faz com que a data "Mon, 26 Sep 2011" seja convertida "Seg, 26 set 2001"
Isto faz com que a data no cabeçalho do email não seja compreendida pelo "Thunderbird"(não sei se acontece em outros programas).
O Thunderbird mostra a data como 31/12/1969
O trecho de código que compromete :
[Time, Date].each do |clazz|
eval "#{clazz}::MONTHNAMES = [nil] + %w(Janeiro Fevereiro Março Abril Maio Junho Julho Agosto Setembro Outubro Novembro Dezembro)"
eval "#{clazz}::DAYNAMES = %w(Domingo Segunda-Feira Terça-Feira Quarta-Feira Quinta-Feira Sexta-Feira Sábado)"
eval "#{clazz}::ABBR_MONTHNAMES = [nil] + %w(Jan Fev Mar Abr Mai Jun Jul Ago Set Out Nov Dez)"
eval "#{clazz}::ABBR_DAYNAMES = %w(Dom Seg Ter Qua Qui Sex Sab)"
end
eduardohertz commented
Tive esse problema em diversos projetos.
Alguma solução?
mfilipe commented
Fecharam o ticket sem deixar a solução. Como resolver esse problema?
No cabeçalho do e-mail a data chega em português:
Date: Seg, 19 Ago 2013 16:09:50 -0300
É preciso fazer com que o BrData nesse caso não faça a conversão.
mfilipe commented
Criei um monkey patch para resolver esse problema:
module Mail
class DateField
def initialize(value = nil, charset = 'utf-8')
self.charset = charset
if value.blank?
value = ::DateTime.now.strftime('%a, %d %b %Y %H:%M:%S %z')
else
value = strip_field(FIELD_NAME, value)
value.to_s.gsub!(/\(.*?\)/, '')
value = ::DateTime.parse(value.to_s.squeeze(" ")).strftime('%a, %d %b %Y %H:%M:%S %z')
end
# FIXME: Esse hack foi adicionado ao projeto, pois existe uma incompatibilidade entre o brazilian-rails e o mail,
# fazendo com que as datas dos emails não seguissem o padrão RFC2822 e com isso todos os emails chegassem
# com a data de 31-12-1969.
{'Dom'=>'Sun','Seg'=>'Mon','Ter'=>'Tue','Qua'=>'Wed','Qui'=>'Thu','Sex'=>'Fri','Sab'=>'Sat',
'Fev'=>'Feb','Abr'=>'Apr','Mai'=>'May','Ago'=>'Aug','Set'=>'Sep','Out'=>'Oct','Dez'=>'Dec'}.each do |k, v|
value.gsub!(k, v)
end
super(CAPITALIZED_FIELD, value, charset)
rescue ArgumentError => e
raise e unless "invalid date"==e.message
end
end
end