مراية لـ
https://github.com/postalserver/postal.git
تم المزامنة 2025-12-01 05:43:04 +00:00
refactor: move Postal::BounceMessage to app/models/bounce_message
هذا الالتزام موجود في:
55
app/models/bounce_message.rb
Normal file
55
app/models/bounce_message.rb
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
class BounceMessage
|
||||||
|
|
||||||
|
def initialize(server, message)
|
||||||
|
@server = server
|
||||||
|
@message = message
|
||||||
|
end
|
||||||
|
|
||||||
|
def raw_message
|
||||||
|
mail = Mail.new
|
||||||
|
mail.to = @message.mail_from
|
||||||
|
mail.from = "Mail Delivery Service <#{@message.route.description}>"
|
||||||
|
mail.subject = "Mail Delivery Failed (#{@message.subject})"
|
||||||
|
mail.text_part = body
|
||||||
|
mail.attachments["Original Message.eml"] = { mime_type: "message/rfc822", encoding: "quoted-printable", content: @message.raw_message }
|
||||||
|
mail.message_id = "<#{SecureRandom.uuid}@#{Postal.config.dns.return_path}>"
|
||||||
|
mail.to_s
|
||||||
|
end
|
||||||
|
|
||||||
|
def queue
|
||||||
|
message = @server.message_db.new_message
|
||||||
|
message.scope = "outgoing"
|
||||||
|
message.rcpt_to = @message.mail_from
|
||||||
|
message.mail_from = @message.route.description
|
||||||
|
message.domain_id = @message.domain&.id
|
||||||
|
message.raw_message = raw_message
|
||||||
|
message.bounce = true
|
||||||
|
message.bounce_for_id = @message.id
|
||||||
|
message.save
|
||||||
|
message.id
|
||||||
|
end
|
||||||
|
|
||||||
|
def postmaster_address
|
||||||
|
@server.postmaster_address || "postmaster@#{@message.domain&.name || Postal.config.web.host}"
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def body
|
||||||
|
<<~BODY
|
||||||
|
This is the mail delivery service responsible for delivering mail to #{@message.route.description}.
|
||||||
|
|
||||||
|
The message you've sent cannot be delivered. Your original message is attached to this message.
|
||||||
|
|
||||||
|
For further assistance please contact #{postmaster_address}. Please include the details below to help us identify the issue.
|
||||||
|
|
||||||
|
Message Token: #{@message.token}@#{@server.token}
|
||||||
|
Orginal Message ID: #{@message.message_id}
|
||||||
|
Mail from: #{@message.mail_from}
|
||||||
|
Rcpt To: #{@message.rcpt_to}
|
||||||
|
BODY
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
@@ -46,7 +46,7 @@ class QueuedMessage < ApplicationRecord
|
|||||||
def send_bounce
|
def send_bounce
|
||||||
return unless message.send_bounces?
|
return unless message.send_bounces?
|
||||||
|
|
||||||
Postal::BounceMessage.new(server, message).queue
|
BounceMessage.new(server, message).queue
|
||||||
end
|
end
|
||||||
|
|
||||||
def allocate_ip_address
|
def allocate_ip_address
|
||||||
|
|||||||
@@ -1,57 +0,0 @@
|
|||||||
# frozen_string_literal: true
|
|
||||||
|
|
||||||
module Postal
|
|
||||||
class BounceMessage
|
|
||||||
|
|
||||||
def initialize(server, message)
|
|
||||||
@server = server
|
|
||||||
@message = message
|
|
||||||
end
|
|
||||||
|
|
||||||
def raw_message
|
|
||||||
mail = Mail.new
|
|
||||||
mail.to = @message.mail_from
|
|
||||||
mail.from = "Mail Delivery Service <#{@message.route.description}>"
|
|
||||||
mail.subject = "Mail Delivery Failed (#{@message.subject})"
|
|
||||||
mail.text_part = body
|
|
||||||
mail.attachments["Original Message.eml"] = { mime_type: "message/rfc822", encoding: "quoted-printable", content: @message.raw_message }
|
|
||||||
mail.message_id = "<#{SecureRandom.uuid}@#{Postal.config.dns.return_path}>"
|
|
||||||
mail.to_s
|
|
||||||
end
|
|
||||||
|
|
||||||
def queue
|
|
||||||
message = @server.message_db.new_message
|
|
||||||
message.scope = "outgoing"
|
|
||||||
message.rcpt_to = @message.mail_from
|
|
||||||
message.mail_from = @message.route.description
|
|
||||||
message.domain_id = @message.domain&.id
|
|
||||||
message.raw_message = raw_message
|
|
||||||
message.bounce = true
|
|
||||||
message.bounce_for_id = @message.id
|
|
||||||
message.save
|
|
||||||
message.id
|
|
||||||
end
|
|
||||||
|
|
||||||
def postmaster_address
|
|
||||||
@server.postmaster_address || "postmaster@#{@message.domain&.name || Postal.config.web.host}"
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def body
|
|
||||||
<<~BODY
|
|
||||||
This is the mail delivery service responsible for delivering mail to #{@message.route.description}.
|
|
||||||
|
|
||||||
The message you've sent cannot be delivered. Your original message is attached to this message.
|
|
||||||
|
|
||||||
For further assistance please contact #{postmaster_address}. Please include the details below to help us identify the issue.
|
|
||||||
|
|
||||||
Message Token: #{@message.token}@#{@server.token}
|
|
||||||
Orginal Message ID: #{@message.message_id}
|
|
||||||
Mail from: #{@message.mail_from}
|
|
||||||
Rcpt To: #{@message.rcpt_to}
|
|
||||||
BODY
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -62,7 +62,7 @@ RSpec.describe UnqueueMessageService do
|
|||||||
end
|
end
|
||||||
|
|
||||||
it "sends a bounce to the sender" do
|
it "sends a bounce to the sender" do
|
||||||
expect(Postal::BounceMessage).to receive(:new).with(server, queued_message.message)
|
expect(BounceMessage).to receive(:new).with(server, queued_message.message)
|
||||||
service.call
|
service.call
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -449,7 +449,7 @@ RSpec.describe UnqueueMessageService do
|
|||||||
end
|
end
|
||||||
|
|
||||||
it "sends a bounce" do
|
it "sends a bounce" do
|
||||||
expect(Postal::BounceMessage).to receive(:new).with(server, queued_message.message)
|
expect(BounceMessage).to receive(:new).with(server, queued_message.message)
|
||||||
service.call
|
service.call
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -479,7 +479,7 @@ RSpec.describe UnqueueMessageService do
|
|||||||
end
|
end
|
||||||
|
|
||||||
it "sends a bounce" do
|
it "sends a bounce" do
|
||||||
expect(Postal::BounceMessage).to receive(:new).with(server, queued_message.message)
|
expect(BounceMessage).to receive(:new).with(server, queued_message.message)
|
||||||
service.call
|
service.call
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -598,9 +598,9 @@ RSpec.describe UnqueueMessageService do
|
|||||||
end
|
end
|
||||||
|
|
||||||
it "does not send a bounce" do
|
it "does not send a bounce" do
|
||||||
allow(Postal::BounceMessage).to receive(:new)
|
allow(BounceMessage).to receive(:new)
|
||||||
service.call
|
service.call
|
||||||
expect(Postal::BounceMessage).to_not have_received(:new)
|
expect(BounceMessage).to_not have_received(:new)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -616,7 +616,7 @@ RSpec.describe UnqueueMessageService do
|
|||||||
end
|
end
|
||||||
|
|
||||||
it "sends a bounce" do
|
it "sends a bounce" do
|
||||||
expect(Postal::BounceMessage).to receive(:new).with(server, queued_message.message)
|
expect(BounceMessage).to receive(:new).with(server, queued_message.message)
|
||||||
service.call
|
service.call
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
المرجع في مشكلة جديدة
حظر مستخدم