Идентификатор сообщения служебной шины Azure Идентификатор электронной почты США

Я создаю пакетное задание для чтения электронной почты из папки «Входящие» с помощью API Microsoft Graph и публикации содержимого электронной почты с помощью служебной шины. Я поместил обнаружение дубликатов в свою служебную шину Azure на основе назначенного идентификатора сообщения. Чтобы предотвратить публикацию одного и того же электронного письма, я поместил идентификатор сообщения электронной почты в идентификатор сообщения служебной шины Azure.

Однако кажется, что длина идентификатора сообщения электронной почты слишком велика, и я не могу использовать его в качестве идентификатора сообщения служебной шины Azure. Любое решение о том, как поместить идентификатор сообщения электронной почты в качестве идентификатора сообщения служебной шины Azure? (Мне не разрешено хранить идентификатор сообщения электронной почты в каком-либо постоянном хранилище, я могу опубликовать его только через служебную шину Azure)

Спасибо

Идентификатор сообщения используется внутри служебной шины Azure и не предназначен для отправки электронных писем с помощью API Microsoft Graph, поскольку это не стандартный адрес электронной почты. Он используется только для маршрутизации сообщений и корреляции со служебной шиной Azure. Вот документация к нему.

Dev 17.12.2020 21:30
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
1
1
316
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Длина идентификатора сообщения служебной шины не может превышать 128 символов. Как правило, значение идентификаторы электронной почты, полученные из API Microsoft Graph, выглядят следующим образом:

AAMkADU1NzNkY2I2LWIxY2QtNGFhOC1iYmE5LWEzODA2ZjJkMjQxNwBGAAAAAABRRlt89urpT62rDl3o5R1RBwCSQ84srYEXTY2slhDtcrhrAAAAAAEMAACSQ84srYEXTY2slhDtcrhrAABlQp2FAAA=

Как правило, его длина составляет 188 символов, что и вызывает эту проблему.

Чтобы решить эту проблему, вы можете попробовать использовать MD5 для создания единого идентификатора для идентификатора электронной почты, по умолчанию его длина будет 32 символа, хотя это значение имеет возможность коллизии с хэшем, который из другой строки, но его вероятность низкая (около 2^-128).

Если вы используете C#, просто попробуйте следующий код:

using Azure.Messaging.ServiceBus;
using System;
using System.Security.Cryptography;
using System.Text;

namespace serviceBusTest
{
    class Program
    {
        static void Main(string[] args)
        {
            string connectionString = "";
            string queueName = "";
           
            var client = new ServiceBusClient(connectionString);

            ServiceBusSender sender = client.CreateSender(queueName);

            ServiceBusMessage message = new ServiceBusMessage();
            var emailID = "AAMkADU1NzNkY2I2LWIxY2QtNGFhOC1iYmE5LWEzODA2ZjJkMjQxNwBGAAAAAABRRlt89urpT62rDl3o5R1RBwCSQ84srYEXTY2slhDtcrhrAAAAAAEMAACSQ84srYEXTY2slhDtcrhrAABlQp2FAAA = ";

            message.MessageId = GetMd5Hash(MD5.Create(), emailID);

            sender.SendMessageAsync(message).GetAwaiter().GetResult();

            ServiceBusReceiver receiver = client.CreateReceiver(queueName);

            ServiceBusReceivedMessage receivedMessage = receiver.ReceiveMessageAsync().GetAwaiter().GetResult();

            Console.WriteLine(receivedMessage.MessageId);
        }

        static string GetMd5Hash(MD5 md5Hash, string input)
        {

            byte[] data = md5Hash.ComputeHash(Encoding.UTF8.GetBytes(input));


            StringBuilder sBuilder = new StringBuilder();
            for (int i = 0; i < data.Length; i++)
            {
                sBuilder.Append(data[i].ToString("x2"));
            }


            return sBuilder.ToString();
        }
    }
}

Результат:

Другие вопросы по теме