Browse Source

Maintenance: Refactor building of email addresses.

Martin Gruner 2 years ago
parent
commit
aa1cb1395b

+ 1 - 1
app/controllers/first_steps_controller.rb

@@ -171,7 +171,7 @@ class FirstStepsController < ApplicationController
   def test_ticket
     agent = current_user
     customer = test_customer
-    from = "#{customer.fullname} <#{customer.email}>"
+    from = Channel::EmailBuild.recipient_line customer.fullname, customer.email
     original_user_id = UserInfo.current_user_id
     result = NotificationFactory::Mailer.template(
       template: 'test_ticket',

+ 1 - 1
app/controllers/users_controller.rb

@@ -263,7 +263,7 @@ class UsersController < ApplicationController
       user_all.each do |user|
         realname = user.fullname
         if user.email.present? && realname != user.email
-          realname = "#{realname} <#{user.email}>"
+          realname = Channel::EmailBuild.recipient_line realname, user.email
         end
         a = if params[:term]
               { id: user.id, label: realname, value: user.email, inactive: !user.active }

+ 1 - 1
app/graphql/gql/queries/autocomplete_search/recipient.rb

@@ -17,7 +17,7 @@ module Gql::Queries
     def label(user)
       return user.fullname if user.email.blank?
 
-      "#{user.fullname} <#{user.email}>"
+      Channel::EmailBuild.recipient_line user.fullname, user.email
     end
   end
 end

+ 4 - 3
app/models/channel/email_build.rb

@@ -177,9 +177,10 @@ returns
 =end
 
   def self.recipient_line(realname, email)
-    return "#{realname} <#{email}>" if realname.match?(%r{^[A-z]+$}i)
-
-    "\"#{realname.gsub('"', '\"')}\" <#{email}>"
+    Mail::Address.new.tap do |address|
+      address.display_name = realname
+      address.address      = email
+    end.format
   end
 
 =begin

+ 1 - 1
app/models/ticket/article/adds_metadata_general.rb

@@ -58,7 +58,7 @@ module Ticket::Article::AddsMetadataGeneral
     is_customer = !TicketPolicy.new(user, ticket).agent_read_access?
 
     if (type.name == 'web' || type.name == 'phone') && is_customer
-      self.from = "#{user.firstname} #{user.lastname} <#{user.email}>"
+      self.from = Channel::EmailBuild.recipient_line "#{user.firstname} #{user.lastname}", user.email
       return
     end
     self.from = "#{user.firstname} #{user.lastname}"

+ 4 - 4
spec/models/channel/email_build_spec.rb

@@ -350,8 +350,8 @@ RSpec.describe Channel::EmailBuild, type: :model do
     context 'with special characters (|) in the realname' do
       let(:realname) { 'Somebody | Some Org' }
 
-      it 'wraps the realname with quotes and wraps the email with <>' do
-        expected_recipient_line = '"Somebody | Some Org" <some.body@example.com>'
+      it 'wraps the email with <>' do
+        expected_recipient_line = 'Somebody | Some Org <some.body@example.com>'
         expect(generated_recipient_line).to eq expected_recipient_line
       end
     end
@@ -359,8 +359,8 @@ RSpec.describe Channel::EmailBuild, type: :model do
     context 'with special characters (spaces) in the realname' do
       let(:realname) { 'Test Admin Agent via Support' }
 
-      it 'wraps the realname with quotes and wraps the email with <>' do
-        expected_recipient_line = '"Test Admin Agent via Support" <some.body@example.com>'
+      it 'wraps the email with <>' do
+        expected_recipient_line = 'Test Admin Agent via Support <some.body@example.com>'
         expect(generated_recipient_line).to eq expected_recipient_line
       end
     end

+ 2 - 2
spec/models/ticket/article_spec.rb

@@ -46,7 +46,7 @@ RSpec.describe Ticket::Article, type: :model do
           let(:created_by) { create(:user) }
 
           it 'sets the from to the realname of the user' do
-            expect(article.reload.from).to eq("\"#{article.created_by.firstname} #{article.created_by.lastname}\" <#{article.ticket.group.email_address.email}>")
+            expect(article.reload.from).to eq("#{article.created_by.firstname} #{article.created_by.lastname} <#{article.ticket.group.email_address.email}>")
           end
         end
 
@@ -54,7 +54,7 @@ RSpec.describe Ticket::Article, type: :model do
           let(:created_by) { User.find(1) }
 
           it 'sets the from to realname of the mail address)' do
-            expect(article.reload.from).to eq("\"#{article.ticket.group.email_address.realname}\" <#{article.ticket.group.email_address.email}>")
+            expect(article.reload.from).to eq("#{article.ticket.group.email_address.realname} <#{article.ticket.group.email_address.email}>")
           end
         end
 

+ 3 - 3
spec/requests/ticket_spec.rb

@@ -920,7 +920,7 @@ RSpec.describe 'Ticket', type: :request do
       expect(response).to have_http_status(:created)
       expect(json_response).to be_a(Hash)
       expect(json_response['ticket_id']).to eq(ticket.id)
-      expect(json_response['from']).to eq(%("Tickets Agent via #{ticket_group.email_address.realname}" <#{ticket_group.email_address.email}>))
+      expect(json_response['from']).to eq(%(Tickets Agent via #{ticket_group.email_address.realname} <#{ticket_group.email_address.email}>))
       expect(json_response['subject']).to eq('some subject')
       expect(json_response['body']).to eq('some body')
       expect(json_response['content_type']).to eq('text/plain')
@@ -936,7 +936,7 @@ RSpec.describe 'Ticket', type: :request do
       expect(response).to have_http_status(:ok)
       expect(json_response).to be_a(Hash)
       expect(json_response['ticket_id']).to eq(ticket.id)
-      expect(json_response['from']).to eq(%("Tickets Agent via #{ticket_group.email_address.realname}" <#{ticket_group.email_address.email}>))
+      expect(json_response['from']).to eq(%(Tickets Agent via #{ticket_group.email_address.realname} <#{ticket_group.email_address.email}>))
       expect(json_response['subject']).not_to eq('new subject')
       expect(json_response['body']).to eq('some body')
       expect(json_response['content_type']).to eq('text/plain')
@@ -1047,7 +1047,7 @@ RSpec.describe 'Ticket', type: :request do
       expect(response).to have_http_status(:created)
       expect(json_response).to be_a(Hash)
       expect(json_response['ticket_id']).to eq(ticket.id)
-      expect(json_response['from']).to eq(%("Tickets Admin via #{ticket_group.email_address.realname}" <#{ticket_group.email_address.email}>))
+      expect(json_response['from']).to eq(%(Tickets Admin via #{ticket_group.email_address.realname} <#{ticket_group.email_address.email}>))
       expect(json_response['subject']).to eq('some subject')
       expect(json_response['body']).to eq('some body')
       expect(json_response['content_type']).to eq('text/plain')