Compare commits

..

1 Commits

Author SHA1 Message Date
邱博亞 fa49a09ab2 Add email_sentdate setting. 2024-09-15 10:22:04 +08:00
6 changed files with 13 additions and 46 deletions

View File

@ -60,13 +60,7 @@ def initialize
# rake = Rake::Task['epaper:send_email'].invoke([params[:id], request.host_with_port])
paper = PaperCriteria.find(params[:id]) rescue nil
if !paper.nil? && paper.invalid_emails.blank?
email_sentdate = paper.get_email_sentdate
if paper.get_email_sentdate
msg = I18n.t('e_paper.newsletter_will_be_sent', {time: email_sentdate.strftime("%Y-%m-%d %H:%M")})
else
msg = I18n.t('e_paper.newsletter_sent')
end
render :json => {"success" => true, "msg": msg}.to_json
render :json => {"success" => true}.to_json
else
invalid_email_list = paper.invalid_emails rescue 'can not find paper'
render :json => {"success" => false,"invalid_emails"=>invalid_email_list}.to_json

View File

@ -16,7 +16,7 @@ class PaperCriteria
field :other_emails
field :invalid_emails, type: Array, :default => []
field :send_failed_emails, type: Array, :default => []
field :email_sentdate, :type => DateTime
field :email_sentdate , :type => DateTime
mount_uploader :image, ImageUploader
@ -34,12 +34,4 @@ class PaperCriteria
end
end
def get_email_sentdate
_email_sentdate = self.email_sentdate
if _email_sentdate && _email_sentdate < DateTime.now
_email_sentdate = nil
end
_email_sentdate
end
end

View File

@ -73,7 +73,7 @@
type : "get",
success: function(data){
if (data.success){
alert(data.msg)
alert("Newsletter sent.")
}else{
var window_width = window.innerWidth
var window_height = window.innerHeight

View File

@ -52,5 +52,3 @@ en:
send_newsletter: Send Newsletter
language_to_send: "Languages allow be subscribed"
email_sentdate: Email Time
newsletter_sent: "Newsletter sent."
newsletter_will_be_sent: "Newsletter will be sent at %{time}."

View File

@ -53,5 +53,3 @@ zh_tw:
send_newsletter: 發送時事通訊
language_to_send: 開放訂閱語系
email_sentdate: 寄送時間
newsletter_sent: "電子報已寄送!"
newsletter_will_be_sent: "電子報會於%{time}寄送!"

View File

@ -11,7 +11,7 @@ namespace :epaper do
papers_data = Admin::EpaperHelper.get_paper_data(paper)
domain = args[:domain]
if !paper.nil?
email_sentdate = paper.get_email_sentdate
email_sentdate = paper.email_sentdate
email_format = /^[A-Za-z0-9+_.-]+@[A-Za-z0-9.-]+$/
subscribers = EPaperSubscriber.where(:language.in=>paper.language_to_send,:email.nin=>['',nil],:subscribed.ne=>false)
subscribers.update_all(:last_paper_sent => paper.id.to_s)
@ -32,13 +32,8 @@ namespace :epaper do
Thread.new do
tmp = []
site = Site.first
if site[:gmail_login_flag]
@address = '127.0.0.1'
@port = 25
else
@address = site['site_settings']['address']
@port = (site['site_settings']['port'].to_i rescue 587)
end
@open_timeout = 10
@read_timeout = 60
@debug_output = nil
@ -47,15 +42,11 @@ namespace :epaper do
emails_valid.each_slice(mail_limit).each do |slice_emails|
invalid_mails = epaper_verify_email(from_addr,slice_emails,tls)
deliver_emails = slice_emails - invalid_mails
email = Email.new(:mail_subject => paper.sending_title, :mail_lang => args[:locale], :template => "admin/e_paper_criterias/emailer", :template_data => {"paper_id" => paper.id, "page" => "http://" + domain + page, "siteurl" => "http://" + domain, "papers_data" => papers_data }, :mail_to => deliver_emails, :module_app_key=>'e_paper', :mail_sentdate=> email_sentdate)
email = Email.new(:mail_subject => paper.sending_title, :mail_lang => args[:locale], :template => "admin/e_paper_criterias/emailer", :template_data => {"paper_id" => paper.id, "page" => "http://" + domain + page, "siteurl" => "http://" + domain, "papers_data" => papers_data }, :mail_to => deliver_emails, :module_app_key=>'e_paper')
begin
email.save
if email_sentdate
puts "Emails will be sent at #{email_sentdate.strftime("%Y-%m-%d %H:%M")}"
else
email.deliver
puts "Sending #{deliver_emails.count} emails"
end
rescue => e
puts [deliver_emails.inspect,e,e.backtrace]
tmp += deliver_emails
@ -63,7 +54,7 @@ namespace :epaper do
error_flag = 0
begin
invalid_mails.each do |invalid_mail|
email = Email.create(:mail_subject => paper.sending_title, :mail_lang => args[:locale], :template => "admin/e_paper_criterias/emailer", :template_data => {"paper_id" => paper.id, "page" => "http://" + domain + page, "siteurl" => "http://" + domain, "papers_data" => papers_data }, :mail_to => invalid_mail, :module_app_key=>'e_paper', :mail_sentdate=> email_sentdate)
email = Email.create(:mail_subject => paper.sending_title, :mail_lang => args[:locale], :template => "admin/e_paper_criterias/emailer", :template_data => {"paper_id" => paper.id, "page" => "http://" + domain + page, "siteurl" => "http://" + domain, "papers_data" => papers_data }, :mail_to => invalid_mail, :module_app_key=>'e_paper')
end
rescue => e
puts [e,e.backtrace]
@ -77,15 +68,9 @@ namespace :epaper do
end
end
def epaper_verify_email(from_addr,check_emails,tls) #true if check_email is ok
return [] if @mail_server_broken
begin
s = Timeout.timeout(@open_timeout, Net::OpenTimeout) do
TCPSocket.open(@address, @port)
end
rescue => e
puts [e.to_s, e.backtrace]
@mail_server_broken = true
end
@socket = epaper_new_internet_message_io(tls ? epaper_tlsconnect(s) : s)
res = epaper_get_response("MAIL FROM:<#{from_addr}>")
invalid_emails = []