Moving on From Outlook Signatures and the System Registry
With Microsoft’s intention to support cloud signatures for Outlook desktop (for Windows), I’ve been working through the challenges of generating and maintaining corporate email signatures for Office 365 users. Previously, I discussed what needs to be done to update the system registry settings for Outlook signatures and explained why the current situation works well for individual users but is a real pain for central management. Today, I want to turn my attention to OWA signatures.
OWA and Outlook Have Different Signatures
It seems weird that after nine years of Office 365, OWA and
Outlook desktop still use different signatures. It’s a pain for many reasons,
including duplication of administrator effort to maintain signatures.
This situation might change (at least, I hope so) if
Microsoft’s new cloud signatures for Outlook pick up some of the framework that
exists to allow administrators update OWA signatures centrally. One thing that
won’t go away is the absolute necessity of accurate directory information. If
the directory doesn’t hold good data about users, it’s going to be much harder
to generate good-looking (and useful) signatures.
The Set-MailboxMessageConfiguration Cmdlet and Signatures
OWA stores its signature information as mailbox settings.
Two signatures can be defined: plain text and HTML and mailbox settings
determine which is used for new messages and replies/forwards.
The Set-MailboxMessageConfiguration cmdlet is the
core component in OWA signature management. Its important parameters are:
SignatureHTML:. This signature is used
for HTML messages.
SignatureText: This signature is used for
plain-text messages.
AutoAddSignature: Controls if OWA applies
signature to new messages.
AutoAddSignatureOnReply: Controls if OWA
applies signatures to replies and forwards.
You can ignore the SignatureTextOnMobile,UseDefaultSignatureOnMobile,
and AutoAddSignatureOnMobile parameters. They only apply to the old OWA
for Devices client and aren’t used by the Outlook Mobile client.
With these parameters in mind, a simple command to manage signatures for a mailbox is:
Set-MailboxMessageConfiguration -Identity James.Ryan -AutoAddSignature $True `
-AutoAddSignatureOnReply $False -SignatureText "From the desk of James Ryan" `
-SignatureHTML "<h2>From the desk of James Ryan</h2>"
Users pick up the amended signature the next time they refresh OWA.
Call Get-Mailbox to fetch the mailboxes. The call might fetch all mailboxes or use a filter to find mailboxes for a specific department, country, or location.
Loop through each mailbox to retrieve information about its mailbox owner from the directory.
Merge user properties with some HTML code (to add some formatting, insert icons, and so on) to build the signature, Once again I am indebted to Code Two’s Free email signature generator for help in figuring out some of the HTML. It’s a lot easier to amend HTML that you know works than to compose it from scratch.
Optional code might add text to the signature based on mailbox properties, such as language-specific text for a country.
Call Set-MailboxMessageConfiguration to update the mailbox with a command like this:
You can download a working script that illustrates the principals of how to go about centralized management for OWA signatures from the Office365ITPros GitHub repository.
Optional Features
To complete the solution, you could schedule a monthly run
of the script to process mailboxes and update signatures. Perhaps every month
the script could be updated to allow corporate PR to insert a new cheery
catchphrase (or graphic about the latest corporate initiative) into signatures.
Or maybe that’s a bad idea.
Another idea is for the script to create a report of missing
directory properties and email the report to administrators when the script
finishes to help improve the quality of the information in the directory.
Blocking User Edits to Signatures
Users can edit the signature created for their mailbox
through OWA options. However, if you make the signature attractive enough,
they’ll probably leave it alone. There’s no out-of-the-box method for
administrators to block the option to update signatures, but you could try
doing this with a user role assignment policy to remove user access to the Set-MailboxMessageConfiguration
cmdlet.
What Microsoft Might Do with Cloud Signatures
OWA signatures prove the value of holding user signature
information in the cloud. It’s so much simpler when administrators can run a
PowerShell script to update signatures across an Office 365 tenant on a
periodic basis. This doesn’t mean that the ISV market for autosignature
products will go away because those products include a heap of functionality
that I haven’t touched upon here. And those products are engineered by people
who think about nothing but how to manage email signatures.
However, for those who would like to write and maintain their own signature generation code, it would be nice if Microsoft builds on what exists for OWA to have Outlook use the same signature information held in user mailboxes. And it would be even better if Outlook Mobile joined the party too. That might be too much to ask in the first round.
Worried that you can’t quite get your head around using PowerShell to manage Office 365? Subscribe to the Office 365 for IT Pros eBook and learn from the hundreds of examples in the book.
Have any of you noticed that Set-MailboxMessageConfiguration no longer has any effect on OWA deployments that contain the multiple signatures feature? I’ve submitted a doc bug here for that (as well as a Support ticket): https://github.com/MicrosoftDocs/office-docs-powershell/issues/8537. Cheers.
Are multiple signatures a preview/beta feature? I don’t have them in my tenant (which is surprising) and OWA options only allow for a single signature. If this is the case, then it’s unsurprising that the PowerShell cmdlet hasn’t caught up with a preview.
{"id":null,"mode":"button","open_style":"in_modal","currency_code":"EUR","currency_symbol":"\u20ac","currency_type":"decimal","blank_flag_url":"https:\/\/office365itpros.com\/wp-content\/plugins\/tip-jar-wp\/\/assets\/images\/flags\/blank.gif","flag_sprite_url":"https:\/\/office365itpros.com\/wp-content\/plugins\/tip-jar-wp\/\/assets\/images\/flags\/flags.png","default_amount":100,"top_media_type":"featured_image","featured_image_url":"https:\/\/office365itpros.com\/wp-content\/uploads\/2022\/11\/cover-141x200.jpg","featured_embed":"","header_media":null,"file_download_attachment_data":null,"recurring_options_enabled":true,"recurring_options":{"never":{"selected":true,"after_output":"One time only"},"weekly":{"selected":false,"after_output":"Every week"},"monthly":{"selected":false,"after_output":"Every month"},"yearly":{"selected":false,"after_output":"Every year"}},"strings":{"current_user_email":"","current_user_name":"","link_text":"Virtual Tip Jar","complete_payment_button_error_text":"Check info and try again","payment_verb":"Pay","payment_request_label":"Office 365 for IT Pros","form_has_an_error":"Please check and fix the errors above","general_server_error":"Something isn't working right at the moment. Please try again.","form_title":"Office 365 for IT Pros","form_subtitle":null,"currency_search_text":"Country or Currency here","other_payment_option":"Other payment option","manage_payments_button_text":"Manage your payments","thank_you_message":"Thank you for supporting the work of Office 365 for IT Pros!","payment_confirmation_title":"Office 365 for IT Pros","receipt_title":"Your Receipt","print_receipt":"Print Receipt","email_receipt":"Email Receipt","email_receipt_sending":"Sending receipt...","email_receipt_success":"Email receipt successfully sent","email_receipt_failed":"Email receipt failed to send. Please try again.","receipt_payee":"Paid to","receipt_statement_descriptor":"This will show up on your statement as","receipt_date":"Date","receipt_transaction_id":"Transaction ID","receipt_transaction_amount":"Amount","refund_payer":"Refund from","login":"Log in to manage your payments","manage_payments":"Manage Payments","transactions_title":"Your Transactions","transaction_title":"Transaction Receipt","transaction_period":"Plan Period","arrangements_title":"Your Plans","arrangement_title":"Manage Plan","arrangement_details":"Plan Details","arrangement_id_title":"Plan ID","arrangement_payment_method_title":"Payment Method","arrangement_amount_title":"Plan Amount","arrangement_renewal_title":"Next renewal date","arrangement_action_cancel":"Cancel Plan","arrangement_action_cant_cancel":"Cancelling is currently not available.","arrangement_action_cancel_double":"Are you sure you'd like to cancel?","arrangement_cancelling":"Cancelling Plan...","arrangement_cancelled":"Plan Cancelled","arrangement_failed_to_cancel":"Failed to cancel plan","back_to_plans":"\u2190 Back to Plans","update_payment_method_verb":"Update","sca_auth_description":"Your have a pending renewal payment which requires authorization.","sca_auth_verb":"Authorize renewal payment","sca_authing_verb":"Authorizing payment","sca_authed_verb":"Payment successfully authorized!","sca_auth_failed":"Unable to authorize! Please try again.","login_button_text":"Log in","login_form_has_an_error":"Please check and fix the errors above","uppercase_search":"Search","lowercase_search":"search","uppercase_page":"Page","lowercase_page":"page","uppercase_items":"Items","lowercase_items":"items","uppercase_per":"Per","lowercase_per":"per","uppercase_of":"Of","lowercase_of":"of","back":"Back to plans","zip_code_placeholder":"Zip\/Postal Code","download_file_button_text":"Download File","input_field_instructions":{"tip_amount":{"placeholder_text":"How much would you like to tip?","initial":{"instruction_type":"normal","instruction_message":"How much would you like to tip? Choose any currency."},"empty":{"instruction_type":"error","instruction_message":"How much would you like to tip? Choose any currency."},"invalid_curency":{"instruction_type":"error","instruction_message":"Please choose a valid currency."}},"recurring":{"placeholder_text":"Recurring","initial":{"instruction_type":"normal","instruction_message":"How often would you like to give this?"},"success":{"instruction_type":"success","instruction_message":"How often would you like to give this?"},"empty":{"instruction_type":"error","instruction_message":"How often would you like to give this?"}},"name":{"placeholder_text":"Name on Credit Card","initial":{"instruction_type":"normal","instruction_message":"Enter the name on your card."},"success":{"instruction_type":"success","instruction_message":"Enter the name on your card."},"empty":{"instruction_type":"error","instruction_message":"Please enter the name on your card."}},"privacy_policy":{"terms_title":"Terms and conditions","terms_body":null,"terms_show_text":"View Terms","terms_hide_text":"Hide Terms","initial":{"instruction_type":"normal","instruction_message":"I agree to the terms."},"unchecked":{"instruction_type":"error","instruction_message":"Please agree to the terms."},"checked":{"instruction_type":"success","instruction_message":"I agree to the terms."}},"email":{"placeholder_text":"Your email address","initial":{"instruction_type":"normal","instruction_message":"Enter your email address"},"success":{"instruction_type":"success","instruction_message":"Enter your email address"},"blank":{"instruction_type":"error","instruction_message":"Enter your email address"},"not_an_email_address":{"instruction_type":"error","instruction_message":"Make sure you have entered a valid email address"}},"note_with_tip":{"placeholder_text":"Your note here...","initial":{"instruction_type":"normal","instruction_message":"Attach a note to your tip (optional)"},"empty":{"instruction_type":"normal","instruction_message":"Attach a note to your tip (optional)"},"not_empty_initial":{"instruction_type":"normal","instruction_message":"Attach a note to your tip (optional)"},"saving":{"instruction_type":"normal","instruction_message":"Saving note..."},"success":{"instruction_type":"success","instruction_message":"Note successfully saved!"},"error":{"instruction_type":"error","instruction_message":"Unable to save note note at this time. Please try again."}},"email_for_login_code":{"placeholder_text":"Your email address","initial":{"instruction_type":"normal","instruction_message":"Enter your email to log in."},"success":{"instruction_type":"success","instruction_message":"Enter your email to log in."},"blank":{"instruction_type":"error","instruction_message":"Enter your email to log in."},"empty":{"instruction_type":"error","instruction_message":"Enter your email to log in."}},"login_code":{"initial":{"instruction_type":"normal","instruction_message":"Check your email and enter the login code."},"success":{"instruction_type":"success","instruction_message":"Check your email and enter the login code."},"blank":{"instruction_type":"error","instruction_message":"Check your email and enter the login code."},"empty":{"instruction_type":"error","instruction_message":"Check your email and enter the login code."}},"stripe_all_in_one":{"initial":{"instruction_type":"normal","instruction_message":"Enter your credit card details here."},"empty":{"instruction_type":"error","instruction_message":"Enter your credit card details here."},"success":{"instruction_type":"normal","instruction_message":"Enter your credit card details here."},"invalid_number":{"instruction_type":"error","instruction_message":"The card number is not a valid credit card number."},"invalid_expiry_month":{"instruction_type":"error","instruction_message":"The card's expiration month is invalid."},"invalid_expiry_year":{"instruction_type":"error","instruction_message":"The card's expiration year is invalid."},"invalid_cvc":{"instruction_type":"error","instruction_message":"The card's security code is invalid."},"incorrect_number":{"instruction_type":"error","instruction_message":"The card number is incorrect."},"incomplete_number":{"instruction_type":"error","instruction_message":"The card number is incomplete."},"incomplete_cvc":{"instruction_type":"error","instruction_message":"The card's security code is incomplete."},"incomplete_expiry":{"instruction_type":"error","instruction_message":"The card's expiration date is incomplete."},"incomplete_zip":{"instruction_type":"error","instruction_message":"The card's zip code is incomplete."},"expired_card":{"instruction_type":"error","instruction_message":"The card has expired."},"incorrect_cvc":{"instruction_type":"error","instruction_message":"The card's security code is incorrect."},"incorrect_zip":{"instruction_type":"error","instruction_message":"The card's zip code failed validation."},"invalid_expiry_year_past":{"instruction_type":"error","instruction_message":"The card's expiration year is in the past"},"card_declined":{"instruction_type":"error","instruction_message":"The card was declined."},"missing":{"instruction_type":"error","instruction_message":"There is no card on a customer that is being charged."},"processing_error":{"instruction_type":"error","instruction_message":"An error occurred while processing the card."},"invalid_request_error":{"instruction_type":"error","instruction_message":"Unable to process this payment, please try again or use alternative method."},"invalid_sofort_country":{"instruction_type":"error","instruction_message":"The billing country is not accepted by SOFORT. Please try another country."}}}},"fetched_oembed_html":false}
Thanks very much for your helpful post
Have any of you noticed that Set-MailboxMessageConfiguration no longer has any effect on OWA deployments that contain the multiple signatures feature? I’ve submitted a doc bug here for that (as well as a Support ticket): https://github.com/MicrosoftDocs/office-docs-powershell/issues/8537. Cheers.
Are multiple signatures a preview/beta feature? I don’t have them in my tenant (which is surprising) and OWA options only allow for a single signature. If this is the case, then it’s unsurprising that the PowerShell cmdlet hasn’t caught up with a preview.
We haven’t done anything special to our deployment, so we should be on the default release channel. That’s why this behavior caught us entirely by surprise as it hasn’t been documented anywhere. See a screenshot from our OWA UI here: https://github.com/MicrosoftDocs/office-docs-powershell/issues/8537#issuecomment-961227380
I really appreciate your feedback (and your blog thus far has been tremendously helpful to our business)!