Private Message Can't Be Reached with private messaging disabled

You have a very specific use-case. There’s no point showing the icon if the user has no messages - or if they’re not allowed to send any per the setting discussed above. It’s also a bit expensive to check if the user has messages and display the button based on that. We’ll fix the issue where the button is not displayed for staff, but we won’t show the icon unconditionally.

For your use-case, you need to customize your theme. You can add this to the header section of your theme if you want your users to have the icon as well.

<script type="text/discourse-plugin"
  api.addUserMenuGlyph(widget => {
   if (!widget.currentUser || widget.currentUser.staff) return

    const glyph = {
     action: "quickAccess",
     actionParam: "messages",
     label: "user.private_messages",
     className: "user-pms-link",
     icon: "envelope",
     href: `${widget.attrs.path}/messages`
    return glyph;

This will show the icon to the users even if that setting is not ticked - but it excludes staff members so that you don’t get two icons for the same thing once we push the fix I talked about earlier.