1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
|
# frozen_string_literal: true
module Mail
module CheckDeliveryParams #:nodoc:
class << self
def check(mail)
[ check_from(mail.smtp_envelope_from),
check_to(mail.smtp_envelope_to),
check_message(mail) ]
end
def check_from(addr)
if Utilities.blank?(addr)
raise ArgumentError, "SMTP From address may not be blank: #{addr.inspect}"
end
check_addr 'From', addr
end
def check_to(addrs)
if Utilities.blank?(addrs)
raise ArgumentError, "SMTP To address may not be blank: #{addrs.inspect}"
end
Array(addrs).map do |addr|
check_addr 'To', addr
end
end
def check_addr(addr_name, addr)
validate_smtp_addr addr do |error_message|
raise ArgumentError, "SMTP #{addr_name} address #{error_message}: #{addr.inspect}"
end
end
def validate_smtp_addr(addr)
if addr
if addr.bytesize > 2048
yield 'may not exceed 2kB'
end
if /[\r\n]/ =~ addr
yield 'may not contain CR or LF line breaks'
end
end
addr
end
def check_message(message)
message = message.encoded if message.respond_to?(:encoded)
if Utilities.blank?(message)
raise ArgumentError, 'An encoded message is required to send an email'
end
message
end
end
end
end
|