Bỏ qua nội dung chính

Làm cách nào để tự động thay đổi chữ ký dựa trên người nhận trong Outlook?

Theo mặc định, Outlook có một chức năng tích hợp để người dùng tự động thay đổi chữ ký trong khi gửi email qua các tài khoản email khác nhau. Nhưng ngoài ra, ở đây tôi sẽ chỉ cho bạn phương pháp tự động thay đổi chữ ký dựa trên những người nhận khác nhau trong trường Tới trong Outlook.

Tự động thay đổi chữ ký dựa trên người nhận bằng mã VBA


Tự động thay đổi chữ ký dựa trên người nhận bằng mã VBA

Vui lòng làm theo các bước dưới đây để áp dụng các chữ ký khác nhau cho người nhận tương ứng khi gửi email trong Outlook.

1. Trước tiên, bạn cần tắt tính năng chữ ký tự động đính kèm trong Outlook. Vui lòng bấm vào Tập tin > Các lựa chọn để mở Tùy chọn Outlook cửa sổ.

2. bên trong Tùy chọn Outlook cửa sổ, chọn email trong ngăn bên trái, sau đó nhấp vào Chữ ký nút trong Soạn tin nhắn phần. Xem ảnh chụp màn hình:

3. bên trong Chữ ký và Văn phòng phẩm hộp thoại, chuyển đến Chọn chữ ký mặc định phần dưới Chữ ký email , chọn một tài khoản email trong Tài khoản email danh sách thả xuống, sau đó chọn (None) từ Các tin nhắn mớiTrả lời / chuyển tiếp danh sách thả xuống. Lặp lại các bước này cho đến khi tất cả các tài khoản email được đặt thành (None). Sau đó nhấp vào OK .

Chú thích: Bạn cũng có thể tạo chữ ký cần thiết của mình trong Chữ ký và Văn phòng phẩm hộp thoại.

4. Nhấp vào OK khi nó trả về Tùy chọn Outlook cửa sổ.

5. Nhấn nút Khác + F11 phím để mở Microsoft Visual Basic cho các ứng dụng cửa sổ.

6. bên trong Microsoft Visual Basic cho các ứng dụng cửa sổ, nhấp đúp ĐâyOutlookSession trong ngăn bên trái để mở cửa sổ Mã và sao chép bên dưới mã VBA vào cửa sổ. Xem ảnh chụp màn hình:

Mã VBA: Tự động thay đổi chữ ký dựa trên người nhận trong Outlook

Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)
'Updated by ExtendOffice 2022/08/01
Dim xMailItem As MailItem
Dim xRecipients As Recipients
Dim xRecipient As Recipient
Dim xRcpAddress As String
Dim xSignatureFile, xSignaturePath As String
Dim xFSO As Scripting.FileSystemObject
Dim xDoc As Document
Dim xFindStr As String
On Error Resume Next
Set xFSO = New Scripting.FileSystemObject
If Item.Class <> olMail Then Exit Sub
Set xMailItem = Item
Set xRecipients = xMailItem.Recipients
xSignaturePath = CreateObject("WScript.Shell").SpecialFolders(5) + "\Microsoft\Signatures\"
For Each xRecipient In xRecipients
    If xRecipient.AddressEntry.AddressEntryUserType = olExchangeUserAddressEntry Then
        xRcpAddress = xRecipient.AddressEntry.GetExchangeUser.PrimarySmtpAddress
    Else
        xRcpAddress = xRecipient.AddressEntry.Address
    End If
    Select Case xRcpAddress
        Case "Email Address 1"
            xSignatureFile = xSignaturePath & "aaa.htm"
            Exit For
        Case "Email Address 2", "Email Address 3"
            xSignatureFile = xSignaturePath & "bbb.htm"
            Exit For
        Case "Email Address 4"
            xSignatureFile = xSignaturePath & "ccc.htm"
            Exit For
    End Select
Next
VBA.DoEvents
Set xDoc = xMailItem.GetInspector.WordEditor
xFindStr = "From: " & xMailItem.Recipients.Item(1).Name & " <" & xRcpAddress & ">"
If VBA.InStr(1, xMailItem.Body, xFindStr) <> 0 Then
    xDoc.Application.Selection.HomeKey Unit:=wdStory, Extend:=wdMove
    With xDoc.Application.Selection.Find
        .ClearFormatting
        .Text = xFindStr
        .Execute Forward:=True
    End With
    With xDoc.Application.Selection
        .MoveLeft wdCharacter, 2
        .InsertParagraphAfter
        .MoveDown Unit:=wdLine, Count:=1
    End With
Else
    With xDoc.Application.Selection
        .EndKey Unit:=wdStory, Extend:=wdMove
        .InsertParagraphAfter
        .MoveDown Unit:=wdLine, Count:=1
    End With
End If
xDoc.Application.Selection.InsertFile FileName:=xSignatureFile, Link:=False, Attachment:=False
End Sub

Chú ý:

  • 1). Trong mã VBA, vui lòng thay thế “Địa chỉ Email 1/2/3/4”Với các địa chỉ email nhất định của người nhận.
  • 2). "dac biet.htm""bbb.htm"Và"ccc.htm"là những chữ ký được chỉ định mà bạn sẽ gửi cho những người nhận tương ứng.
  • 3). Trong trường hợp này, chữ ký “aaa”Sẽ được gửi đến“Địa chỉ Email 1", Chữ ký "bbb”Sẽ được gửi đến“Địa chỉ Email 2"Và"Địa chỉ Email 3"và “Địa chỉ Email 4"Sẽ nhận được email được nhúng với chữ ký"ccc”. Vui lòng thay đổi chúng dựa trên nhu cầu của bạn.
  • 4). Nếu có nhiều người nhận trong một email, thì mã chỉ xem xét người nhận đầu tiên. Trong trường hợp này, những người nhận khác sẽ nhận được email có cùng chữ ký với người nhận đầu tiên.

7. Sau đó nhấn vào CÔNG CỤ > dự án đi đến Tài liệu tham khảo-Dự án hộp thoại. Trong hộp thoại, vui lòng kiểm tra cả Thư viện đối tượng Microsoft Word Thời gian chạy tập lệnh của Microsoft tùy chọn, sau đó bấm OK nút, xem ảnh chụp màn hình:

8. Nhấn nút Khác + Q chìa khóa để đóng Microsoft Visual Basic cho các ứng dụng cửa sổ.

Từ bây giờ, sau khi soạn email và nhấn nút Gửi, chữ ký tương ứng sẽ tự động được chèn vào cuối nội dung email dựa trên địa chỉ email của người nhận trong trường Đến.


Tự động Chèn Ngày Hiện tại làm Chữ ký Khi Gửi Email Trong Outlook:

Nếu bạn muốn chèn dấu thời gian làm chữ ký vào nội dung email trong khi tạo / trả lời / chuyển tiếp email mới trong Outlook của mình, bạn có thể bật Thêm chữ ký ngày khi tạo mới, trả lời và chuyển tiếp email tùy chọn Kutools cho Outlook để chạm đến nó. Xem ảnh chụp màn hình:
Tải xuống và dùng thử ngay bây giờ (dấu hiệu miễn phí 60 ngày)


Công cụ năng suất văn phòng tốt nhất

Kutools cho Outlook - Hơn 100 tính năng mạnh mẽ để tăng cường Outlook của bạn

🤖 Trợ lý thư AI: Email chuyên nghiệp tức thì với phép thuật AI--một cú nhấp chuột để có câu trả lời xuất sắc, giọng điệu hoàn hảo, khả năng thông thạo đa ngôn ngữ. Chuyển đổi email một cách dễ dàng! ...

📧 Tự động hoá email: Vắng Mặt (Có sẵn cho POP và IMAP)  /  Lên lịch gửi email  /  Tự động CC/BCC theo quy định khi gửi Email  /  Tự động chuyển tiếp (Quy tắc nâng cao)   /  Tự động thêm lời chào   /  Tự động chia email nhiều người nhận thành các tin nhắn riêng lẻ hữu ích. Cảm ơn !

📨 Quản lý email: Dễ dàng thu hồi email  /  Chặn email lừa đảo theo chủ đề và những người khác  /  Xóa các email trùng lặp  /  Tìm Kiếm Nâng Cao  /  Hợp nhất các thư mục hữu ích. Cảm ơn !

📁 Tệp đính kèm chuyên nghiệpLưu hàng loạt  /  Tách hàng loạt  /  Nén hàng loạt  /  Tự động lưu   /  Tự động tách  /  Tự động nén hữu ích. Cảm ơn !

🌟 Giao diện ma thuật: 😊Thêm nhiều biểu tượng cảm xúc đẹp và thú vị hơn   /  Tăng năng suất Outlook của bạn với chế độ xem theo thẻ  /  Thu nhỏ Outlook thay vì đóng hữu ích. Cảm ơn !

👍 Kỳ quan chỉ bằng một cú nhấp chuột: Trả lời tất cả bằng tệp đính kèm đến  /   Email chống lừa đảo  /  🕘Hiển thị múi giờ của người gửi hữu ích. Cảm ơn !

👩🏼‍🤝‍👩🏻 Danh bạ & Lịch: Thêm hàng loạt liên hệ từ các email đã chọn  /  Chia nhóm liên hệ thành các nhóm riêng lẻ  /  Xóa lời nhắc sinh nhật hữu ích. Cảm ơn !

Trên 100 tính năng Chờ đợi sự khám phá của bạn! Bấm vào đây để khám phá thêm.

 

 

Comments (43)
No ratings yet. Be the first to rate!
This comment was minimized by the moderator on the site
Hi Crystal,

first of all thanks a lot for your effort in devolping a such useful and smart code!

I'm facing a very similar problem to Josh's one #40488 (also if not identical). I merged two versions of your code in way to have the internal and external different signature feature depending on the recipient address (Pauli #33113) and to solve the problem about the signature being posted at the last selection point in the message (Eric #38525).

When creating a new email everything works flawlessy but unfortunately when replying (both if only to internals, only to externals or both) the signature is being posted at the end of the entire conversation thread instead of at the end of my last reply.

I performed different tests and tryed some mods but i didn't came up. May you please help me in solving this problem? I'm looking to assemble a code with internal and external different signature depending on recipient feature posting the signature always at the end of my last message (in both new message and reply message).

I'm at your complete disposal for helping debugging and testing. I think this should be a definitive full feature version for lot of users.

Thanks a lot in advance anyway and have a nice day.
This comment was minimized by the moderator on the site
Hi Lorenzo,

Can you tell me which code are you using? Is it the one I replied to Pauli Pauli #33114?
This comment was minimized by the moderator on the site
Hi Crystal,
first thanks a lot for your efforts in coding these Outlook signature smart solutions!

I'm facing a similar problem to Josh #40488: I merged your code from your answer to Pauli #33114 (std version + internal and external signature recognition) with the update you gave as answer to the problem faced by Lelian #39096 (signature posted at the end of all the conversation history when replying).

Unfortunately the update given to Lelian #39096 seems not to work in my case very likely such as (but not identical) posted by Josh. When i create a new message everything it's working flawlessy but unfortunately when replying with both the internal or external version of the signature, that is posted at the end of all the conversation thread instead of at the end of only my last message.

I tried different tests and mods but I'm still not managing in understanding why. May you please help me/us to find a solution to this problem? I'm at your disposal for debugging and testing purposes. I think that this one should be a definitive version for lot of users.

Thanks in advance anyway and have a nice day.
This comment was minimized by the moderator on the site
Hi! I have implemented the code at for the most part it works as intended. However, every now and then it inserts the signature in the middle of a message. it first happened when I attached in table in the body. the signature was inserted into the table. Also, it has happened that it cuts off the some of the text such that two-three lines of text are in the end of the mail (after the signature). This doesn't happen all the time, but I hope you can help to solve it so that it becomes more reliable.
This comment was minimized by the moderator on the site
Hi Mikkel Lundsgaard,
The code works well in my case. Which Outlook version are you using?
This comment was minimized by the moderator on the site
I suppose it's the latest version.
This comment was minimized by the moderator on the site
Hi Crystal,

Hope you are well.

Can you advise if it is possible to add a different signature based upon the subject field having specific words.

Many thanks
Matt
This comment was minimized by the moderator on the site
Hi Matt Read,
Thank you for your comment. I am not able to solve this problem yet.
This comment was minimized by the moderator on the site
Ok thank you for taking the time
This comment was minimized by the moderator on the site
Hi Crystal,

Same as others in this thread, I'd like my signature to default to an external signature if there's any non-internal email addresses in the to or cc line and switch to an internal signature when it's only internal email addresses. To do so, I've combined your most updated code (response to Lelian) with Random_Guest's response to Daniela (defaulting to the external signature). The result is that when I'm only responding to internal email addresses, the signature works perfectly; however, when my external signature is pulled in, it drops the signature into the bottom of the email chain, not to the end of the email I'm sending. Can you please advise how to correct? I've included the code below:

Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)
'Updated by ExtendOffice 2022/08/01
Dim xMailItem As MailItem
Dim xRecipients As Recipients
Dim xRecipient As Recipient
Dim xRcpAddress As String
Dim xSignatureFile, xSignaturePath As String
Dim xFSO As Scripting.FileSystemObject
Dim xDoc As Document
Dim xFindStr As String
On Error Resume Next
Set xFSO = New Scripting.FileSystemObject
If Item.Class <> olMail Then Exit Sub
Set xMailItem = Item
Set xRecipients = xMailItem.Recipients
xSignaturePath = CreateObject("WScript.Shell").SpecialFolders(5) + "\Microsoft\Signatures\"
For Each xRecipient In xRecipients
If xRecipient.AddressEntry.AddressEntryUserType = olExchangeUserAddressEntry Then
xRcpAddress = xRecipient.AddressEntry.GetExchangeUser.PrimarySmtpAddress
Else
xRcpAddress = xRecipient.AddressEntry.Address
End If
If VBA.InStr(VBA.LCase(xRcpAddress), "@mycompany'sname") = 0 Then 'Enter the string in the double quotation marks. If the recipient email address contains this string, the below signature "internal.htm" will be assigned to the email. Otherwise, assign the signature "external.htm".
xSignatureFile = xSignaturePath & "External.htm"
Exit For
Else
xSignatureFile = xSignaturePath & "Internal.htm"
End If
Next
VBA.DoEvents
Set xDoc = xMailItem.GetInspector.WordEditor
xFindStr = "From: " & xMailItem.Recipients.Item(1).Name & " <" & xRcpAddress & ">"
If VBA.InStr(1, xMailItem.Body, xFindStr) <> 0 Then
xDoc.Application.Selection.HomeKey Unit:=wdStory, Extend:=wdMove
With xDoc.Application.Selection.Find
.ClearFormatting
.Text = xFindStr
.Execute Forward:=True
End With
With xDoc.Application.Selection
.MoveLeft wdCharacter, 2
.InsertParagraphAfter
.MoveDown Unit:=wdLine, Count:=1
End With
Else
With xDoc.Application.Selection
.EndKey Unit:=wdStory, Extend:=wdMove
.InsertParagraphAfter
.MoveDown Unit:=wdLine, Count:=1
End With
End If
xDoc.Application.Selection.InsertFile FileName:=xSignatureFile, Link:=False, Attachment:=False
End Sub
This comment was minimized by the moderator on the site
Hi Josh,
This problem is a bit complicated. I need time to find a solution. Just not able to handle it right now. Sorry for that.
This comment was minimized by the moderator on the site
No problem -- thanks for giving it a look!
This comment was minimized by the moderator on the site
Bonjour,

Quand je réponds à des mails, la signature automatique s'insère tout en bas, mais j'aimerais qu'elle s'insère en bas de mon message à moi.

Avez vous une solution ?

Lélian
This comment was minimized by the moderator on the site
Hi LÉLIAN ALEMPS.
The VBA code has been updated. Thank you for your feedback. Please give it a try.

Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)
'Updated by ExtendOffice 2022/08/01
Dim xMailItem As MailItem
Dim xRecipients As Recipients
Dim xRecipient As Recipient
Dim xRcpAddress As String
Dim xSignatureFile, xSignaturePath As String
Dim xFSO As Scripting.FileSystemObject
Dim xDoc As Document
Dim xFindStr As String
On Error Resume Next
Set xFSO = New Scripting.FileSystemObject
If Item.Class <> olMail Then Exit Sub
Set xMailItem = Item
Set xRecipients = xMailItem.Recipients
xSignaturePath = CreateObject("WScript.Shell").SpecialFolders(5) + "\Microsoft\Signatures\"
For Each xRecipient In xRecipients
    If xRecipient.AddressEntry.AddressEntryUserType = olExchangeUserAddressEntry Then
        xRcpAddress = xRecipient.AddressEntry.GetExchangeUser.PrimarySmtpAddress
    Else
        xRcpAddress = xRecipient.AddressEntry.Address
    End If
    Select Case xRcpAddress
        Case "Email Address 1"
            xSignatureFile = xSignaturePath & "aaa.htm"
            Exit For
        Case "Email Address 2", "Email Address 3"
            xSignatureFile = xSignaturePath & "bbb.htm"
            Exit For
        Case "Email Address 4"
            xSignatureFile = xSignaturePath & "ccc.htm"
            Exit For
    End Select
Next
VBA.DoEvents
Set xDoc = xMailItem.GetInspector.WordEditor
xFindStr = "From: " & xMailItem.Recipients.Item(1).Name & " <" & xRcpAddress & ">"
If VBA.InStr(1, xMailItem.Body, xFindStr) <> 0 Then
    xDoc.Application.Selection.HomeKey Unit:=wdStory, Extend:=wdMove
    With xDoc.Application.Selection.Find
        .ClearFormatting
        .Text = xFindStr
        .Execute Forward:=True
    End With
    With xDoc.Application.Selection
        .MoveLeft wdCharacter, 2
        .InsertParagraphAfter
        .MoveDown Unit:=wdLine, Count:=1
    End With
Else
    With xDoc.Application.Selection
        .EndKey Unit:=wdStory, Extend:=wdMove
        .InsertParagraphAfter
        .MoveDown Unit:=wdLine, Count:=1
    End With
End If
xDoc.Application.Selection.InsertFile FileName:=xSignatureFile, Link:=False, Attachment:=False
End Sub
This comment was minimized by the moderator on the site
Hi Crystal - I also have the same issue as Tim (#33997) and Greg (#34358) referenced above, but do not see a solution. The signature appears in my email in the last place I click before I hit 'send, thus often appearing in the middle of the email. Any help/solutions?

Thank you!

Eric
This comment was minimized by the moderator on the site
Hi Eric Anderson,
Thank you for your feedback. The code has now been updated and the issue has been solved. Please give it a try.
Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)
'Updated by ExtendOffice 2022/6/24
Dim xMailItem As MailItem
Dim xRecipients As Recipients
Dim xRecipient As Recipient
Dim xRcpAddress As String
Dim xSignatureFile, xSignaturePath As String
Dim xFSO As Scripting.FileSystemObject
Dim xDoc As Document
On Error Resume Next
Set xFSO = New Scripting.FileSystemObject
If Item.Class <> olMail Then Exit Sub
Set xMailItem = Item
Set xRecipients = xMailItem.Recipients
xSignaturePath = CreateObject("WScript.Shell").SpecialFolders(5) + "\Microsoft\Signatures\"
For Each xRecipient In xRecipients
    If xRecipient.AddressEntry.AddressEntryUserType = olExchangeUserAddressEntry Then
        xRcpAddress = xRecipient.AddressEntry.GetExchangeUser.PrimarySmtpAddress
    Else
        xRcpAddress = xRecipient.AddressEntry.Address
    End If
    Debug.Print xRcpAddress
    Select Case xRcpAddress
        Case ""
            xSignatureFile = xSignaturePath & "aaa.htm"
            Exit For
        Case "", ""
            xSignatureFile = xSignaturePath & "bbb.htm"
            Exit For
        Case ""
            xSignatureFile = xSignaturePath & "ccc.htm"
            Exit For
    End Select
Next
VBA.DoEvents
Set xDoc = xMailItem.GetInspector.WordEditor
xDoc.Application.Selection.EndKey Unit:=wdStory, Extend:=wdMove
xDoc.Application.Selection.InsertParagraphAfter
xDoc.Application.Selection.MoveDown Unit:=wdLine, Count:=1
xDoc.Application.Selection.InsertFile FileName:=xSignatureFile, Link:=False, Attachment:=False
End Sub
This comment was minimized by the moderator on the site
I have multiple email accounts setup on Outlook and have your script setup to email different signatures to the internal and external emails.

How can I modify the script so that it only sends these signatures if I'm sending from ?

In other words, I don't want to send these signature when I'm sending from an email address other than .

Thanks,
This comment was minimized by the moderator on the site
Hi Jeff Weaver,
The following VBA code has been modified to insert these signatures when sending emails only from a specified email account. Please give it a try. hope I can help.
Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)
'Updated by ExtendOffice 2022/06/10
Dim xMailItem As MailItem
Dim xRecipients As Recipients
Dim xRecipient As Recipient
Dim xRcpAddress As String
Dim xSignatureFile, xSignaturePath As String
Dim xFSO As Scripting.FileSystemObject
Dim xDoc As Document
On Error Resume Next
Set xFSO = New Scripting.FileSystemObject
If Item.Class <> olMail Then Exit Sub
Set xMailItem = Item
If xMailItem.SendUsingAccount.SmtpAddress <> "" Then Exit Sub 'The email account you send emails from
Set xRecipients = xMailItem.Recipients
xSignaturePath = CreateObject("WScript.Shell").SpecialFolders(5) + "\Microsoft\Signatures\"
For Each xRecipient In xRecipients
    If xRecipient.AddressEntry.AddressEntryUserType = olExchangeUserAddressEntry Then
        xRcpAddress = xRecipient.AddressEntry.GetExchangeUser.PrimarySmtpAddress
    Else
        xRcpAddress = xRecipient.AddressEntry.Address
    End If
    Select Case xRcpAddress
        Case "Email Address 1"
            xSignatureFile = xSignaturePath & "aaa.htm"
            Exit For
        Case "Email Address 2", "Email Address 3"
            xSignatureFile = xSignaturePath & "bbb.htm"
            Exit For
        Case "Email Address 4"
            xSignatureFile = xSignaturePath & "ccc.htm"
            Exit For
    End Select
Next
VBA.DoEvents
Set xDoc = xMailItem.GetInspector.WordEditor
xDoc.Application.Selection.EndKey
xDoc.Application.Selection.InsertParagraphAfter
xDoc.Application.Selection.MoveDown Unit:=wdLine, Count:=1
xDoc.Application.Selection.InsertFile FileName:=xSignatureFile, Link:=False, Attachment:=False
End Sub
This comment was minimized by the moderator on the site
Hello Crystal,
I have a question about the source code below.
I would like to send an internal signature only to certain email recipients (30), as soon as another email address is added, the external signature should be used.
Can you help me with my request?
Many thanks in advance.
This comment was minimized by the moderator on the site
This code worked for me until I restarted my PC.When I open alt+F11 again, all the code is still in the same place, but when I send an e-mail, it just sends it without a signature and without issuing any sort of warning message.
This comment was minimized by the moderator on the site
Hi Ivan,The problem is caused by Excel disabling the Macro option. You need to get into the Outlook Options window by clicking File > Options. In the Outlook Options window, click Trust Center in the left pane, and then click Trust Center Settings button. In the Trust Center window, click Macro Settings in the left pane, and then select the Enable all macros radio button and check the Apply macro security settings to installed add-ins box. See the attached screenshot below.
There are no comments posted here yet
Load More
Please leave your comments in English
Posting as Guest
×
Rate this post:
0   Characters
Suggested Locations