Адрес vSto reference x400C#

Место общения программистов C#
Ответить
Anonymous
 Адрес vSto reference x400

Сообщение Anonymous »

В настоящее время я испытываю редкую проблему, когда объект получателя Outlook, похоже, не содержит SMTP Информацию пользователя. Доступна только информация о X400, очень трудно повторить это.

Код: Выделить всё

var exchangeUser = addressEntry.GetExchangeUser();

if (exchangeUser != null)
{
//... get smtp exchangeUser.PrimarySmtpAddress
}
else
{
//... try find smtp by:
var propertyEmailAttempt1 = addressEntry.PropertyAccessor.GetPropertySafe("0x39FE001F");
var propertyEmailAttempt2 = addressEntry.PropertyAccessor.GetPropertySafe("0x800F101F");
var propertyEmailAttempt3 = addressEntry.PropertyAccessor.GetPropertySafe("0x39FE001E");

}
< /code>
Во всех случаях свойства возвращают null. < /p>
 public static dynamic GetPropertySafe(this Microsoft.Office.Interop.Outlook.PropertyAccessor propertyAccessor, string tag)
{
try
{
return propertyAccessor.GetProperty($"http://schemas.microsoft.com/mapi/proptag/{tag}");
}
catch
{
//Property is most likely not found
return null;
}
}
На последнем шаге я просто выбираю addressentry.address , который возвращает неисправный адрес. Код делает фильтр для типа Ex. Получатель происходит от контакта в Outlook, где контакт имеет SMTP -адрес, однако недоступен в модели, только адрес X400. Сам контакт присутствует в той же обменной среде.Trace.WriteLine($"Recipient EX resolved: {recipient.Resolved} - {recipient.AddressEntry.Address}");
// Is not resolved and does not contain @.
if (!recipient.Resolved && recipient.AddressEntry?.Address?.Contains("@") == false)
{
// Try first resolve.
recipient.Resolve();

Trace.WriteLine($"Recipient EX second resolved: {recipient.Resolved} - {appOutlook.Session.Offline}");
// Now resolved?
if (!recipient.Resolved && appOutlook.Session.Offline == false)
{
string address = $"{recipient.Address}";
// Create entry.
Recipient tempRecipient = appOutlook.Session.CreateRecipient(address);
tempRecipient.Resolve();

Trace.WriteLine($"TempRecipient EX resolved: {tempRecipient.Resolved} - {address}");
if (tempRecipient.Resolved)
{
var result = IsExchangeUser(tempRecipient.AddressEntry, type);
Marshal.ReleaseComObject(tempRecipient);
return result;
}
}
}
< /code>
Однако в моих тестах, с адресом x400, который я использовал для своих тестов, никогда не решайте на последнем шаге: < /p>
Recipient tempRecipient = appOutlook.Session.CreateRecipient(address);
tempRecipient.Resolve();
< /code>
У меня нет идей о том, как это исправить. Возможным предложением в Интернете было использование выкупа Outlook. Однако остается вопрос, могу ли я исправить это с помощью выкупа Outlook?

Подробнее здесь: https://stackoverflow.com/questions/794 ... 00-address
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»