diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 73e9c2a..677e757 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -63,6 +63,7 @@
     <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
     <uses-permission android:name="android.permission.BROADCAST_STICKY" />
     <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
+    <uses-permission android:name="android.permission.RECEIVE_SMS" />
     <uses-permission android:name="android.permission.SEND_SMS" />
     <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
     <uses-permission android:name="android.permission.CONNECTIVITY_USE_RESTRICTED_NETWORKS" />
@@ -658,6 +659,16 @@
         </receiver>
 
         <receiver
+            android:name="com.android.voicemail.impl.sms.AdvvmSmsReceiver"
+            android:exported="true"
+            android:directBootAware="true">
+            <intent-filter>
+                <action android:name="android.intent.action.DATA_SMS_RECEIVED"/>
+                <data android:host="localhost" android:port="5499" android:scheme="sms"/>
+            </intent-filter>
+        </receiver>
+
+        <receiver
             android:name="com.android.voicemail.impl.VoicemailClientReceiver"
             android:exported="false">
             <intent-filter>
diff --git a/java/com/android/dialer/util/PermissionsUtil.java b/java/com/android/dialer/util/PermissionsUtil.java
index 3844380..7db383f 100644
--- a/java/com/android/dialer/util/PermissionsUtil.java
+++ b/java/com/android/dialer/util/PermissionsUtil.java
@@ -26,6 +26,7 @@
 import static android.Manifest.permission.READ_CONTACTS;
 import static android.Manifest.permission.READ_PHONE_STATE;
 import static android.Manifest.permission.READ_VOICEMAIL;
+import static android.Manifest.permission.RECEIVE_SMS;
 import static android.Manifest.permission.SEND_SMS;
 import static android.Manifest.permission.WRITE_CALL_LOG;
 import static android.Manifest.permission.WRITE_CONTACTS;
@@ -70,6 +71,7 @@
               WRITE_CALL_LOG,
               READ_PHONE_STATE,
               MODIFY_PHONE_STATE,
+              RECEIVE_SMS,
               SEND_SMS,
               CALL_PHONE,
               ADD_VOICEMAIL,
@@ -138,6 +140,10 @@
     return hasPermission(context, permission.ADD_VOICEMAIL);
   }
 
+  public static boolean hasReceiveSmsPermissions(Context context) {
+    return hasPermission(context, permission.RECEIVE_SMS);
+  }
+
   public static boolean hasSendSmsPermissions(Context context) {
     return hasPermission(context, permission.SEND_SMS);
   }
diff --git a/java/com/android/voicemail/VisualVoicemailTypeExtensions.java b/java/com/android/voicemail/VisualVoicemailTypeExtensions.java
index 0564810..051f393 100644
--- a/java/com/android/voicemail/VisualVoicemailTypeExtensions.java
+++ b/java/com/android/voicemail/VisualVoicemailTypeExtensions.java
@@ -26,4 +26,6 @@
 
   // Protocol used by Verizon wireless
   public static final String VVM_TYPE_VVM3 = "vvm_type_vvm3";
+  // Protocol used by AT&T
+  public static final String VVM_TYPE_ADVVM = "vvm_type_advvm";
 }
diff --git a/java/com/android/voicemail/VoicemailPermissionHelper.java b/java/com/android/voicemail/VoicemailPermissionHelper.java
index b7cdbca..b8b0d90 100644
--- a/java/com/android/voicemail/VoicemailPermissionHelper.java
+++ b/java/com/android/voicemail/VoicemailPermissionHelper.java
@@ -37,6 +37,7 @@
     permission.WRITE_VOICEMAIL,
     permission.READ_VOICEMAIL,
     permission.READ_PHONE_STATE,
+    permission.RECEIVE_SMS,
     permission.SEND_SMS
   };
 
diff --git a/java/com/android/voicemail/impl/OmtpVvmCarrierConfigHelper.java b/java/com/android/voicemail/impl/OmtpVvmCarrierConfigHelper.java
index 8c91ebf..1224789 100644
--- a/java/com/android/voicemail/impl/OmtpVvmCarrierConfigHelper.java
+++ b/java/com/android/voicemail/impl/OmtpVvmCarrierConfigHelper.java
@@ -91,6 +91,7 @@
 
   public static final String KEY_VVM_CLIENT_PREFIX_STRING = "vvm_client_prefix_string";
   private static final String KEY_IGNORE_TRANSCRIPTION_BOOL = "vvm_ignore_transcription";
+  private static final String KEY_USE_DIRECT_TLS_CONNECTION_BOOL = "vvm_use_direct_tls_connection";
 
   private final Context context;
   private final PersistableBundle carrierConfig;
@@ -254,6 +255,10 @@
   /** @return Port to start a SSL IMAP connection directly. */
   public int getSslPort() {
     Assert.checkArgument(isValid());
+    if (useDirectTlsConnection()) {
+      VvmLog.i(TAG, "vvm_use_direct_tls_connection = true");
+      return 993;
+    }
     return (int) getValue(KEY_VVM_SSL_PORT_NUMBER_INT, 0);
   }
 
@@ -502,4 +507,12 @@
     Assert.checkArgument(isValid());
     return (boolean) getValue(KEY_IGNORE_TRANSCRIPTION_BOOL, false);
   }
+
+  /**
+   * Allow forcing direct TLS, default to false.
+   */
+  public boolean useDirectTlsConnection() {
+    Assert.checkArgument(isValid());
+    return (boolean) getValue(KEY_USE_DIRECT_TLS_CONNECTION_BOOL, false);
+  }
 }
diff --git a/java/com/android/voicemail/impl/imap/ImapHelper.java b/java/com/android/voicemail/impl/imap/ImapHelper.java
index 95e7bbb..955eba9 100644
--- a/java/com/android/voicemail/impl/imap/ImapHelper.java
+++ b/java/com/android/voicemail/impl/imap/ImapHelper.java
@@ -125,6 +125,10 @@
       int port = Integer.parseInt(prefs.getString(OmtpConstants.IMAP_PORT, null));
       int auth = ImapStore.FLAG_NONE;
 
+      if (serverName != null) {
+        serverName = serverName.replaceFirst("[12]:", "");
+      }
+
       int sslPort = this.config.getSslPort();
       if (sslPort != 0) {
         port = sslPort;
diff --git a/java/com/android/voicemail/impl/mail/store/ImapConnection.java b/java/com/android/voicemail/impl/mail/store/ImapConnection.java
index 4a4debb..8b1ee83 100644
--- a/java/com/android/voicemail/impl/mail/store/ImapConnection.java
+++ b/java/com/android/voicemail/impl/mail/store/ImapConnection.java
@@ -171,6 +171,9 @@
 
   /** Attempts to convert the connection into secure connection. */
   private void maybeDoStartTls() throws IOException, MessagingException {
+    if (imapStore.getImapHelper().getConfig().useDirectTlsConnection()) {
+      return;
+    }
     // STARTTLS is required in the OMTP standard but not every implementation support it.
     // Make sure the server does have this capability
     if (hasCapability(ImapConstants.CAPABILITY_STARTTLS)) {
diff --git a/java/com/android/voicemail/impl/protocol/VisualVoicemailProtocolFactory.java b/java/com/android/voicemail/impl/protocol/VisualVoicemailProtocolFactory.java
index 7f635f1..57f1e1f 100644
--- a/java/com/android/voicemail/impl/protocol/VisualVoicemailProtocolFactory.java
+++ b/java/com/android/voicemail/impl/protocol/VisualVoicemailProtocolFactory.java
@@ -39,6 +39,7 @@
       case TelephonyManager.VVM_TYPE_CVVM:
         return new CvvmProtocol();
       case VisualVoicemailTypeExtensions.VVM_TYPE_VVM3:
+      case VisualVoicemailTypeExtensions.VVM_TYPE_ADVVM:
         return new Vvm3Protocol();
       default:
         VvmLog.e(TAG, "Unexpected visual voicemail type: " + type);
diff --git a/java/com/android/voicemail/impl/sms/AdvvmSmsReceiver.java b/java/com/android/voicemail/impl/sms/AdvvmSmsReceiver.java
new file mode 100644
index 0000000..384b8ce
--- /dev/null
+++ b/java/com/android/voicemail/impl/sms/AdvvmSmsReceiver.java
@@ -0,0 +1,49 @@
+/*
+ * Copyright (C) 2024 The LineageOS Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+package com.android.voicemail.impl.sms;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.net.Uri;
+import android.provider.Telephony;
+import android.telephony.SmsMessage;
+import com.android.dialer.telecom.TelecomUtil;
+import android.telecom.PhoneAccount;
+import android.telecom.PhoneAccountHandle;
+import com.android.voicemail.impl.sync.SyncTask;
+
+/** Receive data SMS messages for the ADVVM protocol used by AT&T and others. */
+public class AdvvmSmsReceiver extends BroadcastReceiver {
+
+  private static final String TAG = "AdvvmSmsReceiver";
+
+  @Override
+  public void onReceive(Context context, Intent intent) {
+    SmsMessage[] messages = Telephony.Sms.Intents.getMessagesFromIntent(intent);
+    for (SmsMessage msg: messages) {
+      // in order to query parameters we need to have a `scheme://`
+      Uri bodyUri = Uri.parse("advvm://" + msg.getMessageBody());
+      // TODO: once AT&T's protocol is better understood, we probably will need
+      // to handle the actual parameters of this. For now, just trigger a sync
+      // since that is apparently the only time we will receive these messages
+      // currently.
+      PhoneAccountHandle phone =
+          TelecomUtil.getDefaultOutgoingPhoneAccount(context, PhoneAccount.SCHEME_VOICEMAIL);
+      SyncTask.start(context, phone);
+    }
+  }
+}
diff --git a/privapp_whitelist_com.android.dialer-ext.xml b/privapp_whitelist_com.android.dialer-ext.xml
index 814e88e..c13d9c7 100644
--- a/privapp_whitelist_com.android.dialer-ext.xml
+++ b/privapp_whitelist_com.android.dialer-ext.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
-     Copyright (C) 2019-2023 The LineageOS Project
+     Copyright (C) 2019-2024 The LineageOS Project
 
      Licensed under the Apache License, Version 2.0 (the "License");
      you may not use this file except in compliance with the License.
@@ -19,5 +19,6 @@
     <privapp-permissions package="com.android.dialer">
         <permission name="android.permission.CAPTURE_AUDIO_OUTPUT"/>
         <permission name="android.permission.BROADCAST_CLOSE_SYSTEM_DIALOGS"/>
+        <permission name="android.permission.RECEIVE_SMS"/>
     </privapp-permissions>
 </permissions>
