powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / CDO.Message + .AddAttachment(attach) юникодные имена файлов не поддерживаются?
1 сообщений из 1, страница 1 из 1
CDO.Message + .AddAttachment(attach) юникодные имена файлов не поддерживаются?
    #39841714
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос наверно к тем, кто работал с CDO.Message (который "для Windows 2000"), кто как говорится в теме, чего-то помнит и с этим сталкивался.

Мухлюем письмо.
С отправкой текста в UTF-8 все понятно, стоит
Код: vbnet
1.
2.
.BodyPart.Charset = "utf-8"
.TextBodyPart.Charset = "utf-8"


В общем полный кусок много лет рабочего кода такой
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
    If m_smtp_UseCDO Then 'CDO.Message
      Dim o_Mess As New Object
      Try
        o_Mess = CreateObject("CDO.Message")
        Dim v_Conf As String = "http://schemas.microsoft.com/cdo/configuration/"
        With o_Mess
          '===(В-1)код необходим для добавления utf-8 в Subject(если .AddAttachment стоит до .TextBodyPart.Charset)===
          If m_msg_UseUTF8 Then .BodyPart.Charset = "utf-8"
          '===(В-1)код необходим для добавления utf-8 в Subject(если .AddAttachment стоит до .TextBodyPart.Charset)===
          If (Strings.Len(m_msg_FromAddress) > 0) AndAlso (Strings.Len(m_msg_FromDisplayName) > 0) Then
            .From = m_msg_FromDisplayName & "<" & m_msg_FromAddress & ">"
          ElseIf Strings.Len(m_msg_FromAddress) > 0 Then
            .From = m_msg_FromAddress
          End If
          If Strings.Len(m_msg_To) > 0 Then .To = m_msg_To
          If Strings.Len(m_msg_Cc) > 0 Then .CC = m_msg_Cc
          If Strings.Len(m_msg_Bcc) > 0 Then .BCC = m_msg_Bcc
          If Strings.Len(m_msg_Subject) > 0 Then .Subject = m_msg_Subject
          .TextBody = m_msg_TextBody
          If m_msg_UseUTF8 Then
            .TextBodyPart.Charset = "utf-8"
           End If
          If Strings.Len(m_msg_Attachments) > 0 Then
            For i As Integer = 0 To ChNum(m_msg_Attachments, ";")
              Dim attach As String = Split(m_msg_Attachments, ";")(i)
              .AddAttachment(attach)
            Next
          End If
          With .Configuration.Fields
            .item(v_Conf & "sendusing") = 2
...


Вложение добавляем:
Код: vbnet
1.
.AddAttachment(attach)



Если имя файла-вложения на английском -без проблем.
Если имя файла-вложения на русском (при этом язык для НЕ-юникод программ в панели управления установлен русский) - тоже без проблем.
Без проблем, имеется ввиду имя файла (как оно вставилось в письмо) не коверкается.

А если, например, у меня в исходном имени файла присутствуют японские иероглифы, то они в имени файла, вложенного в письмо, заменяются на символы подчеркивания .
====
Для сравнения, если я использую System.Net.Mail,
у меня в указанной ситуации таки будет вложен файл с "оригинальными иероглифами", а не с подчеркиваниями.
====

Издержки "древней" технологии CDO.Message или можно что-то попытаться подправить?


Практически как моделируется ситуация.
Прога генерирует файл, в имя которого может входить дата и/или время, генерируемые в заданном формате (Culture + pattern).
В зависимости от выбора формата там могут случиться эти самые "иероглифы", не соотв. текущей Culture (локали).
С этим все OK, файлы на диске генерируются как заказано.
Далее этот файл вкладывается в email. CDO.Message заменяет нехарактерные для текущей локали символы на подчеркивания. Ерунда, но таки непорядок.
...
Рейтинг: 0 / 0
1 сообщений из 1, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / CDO.Message + .AddAttachment(attach) юникодные имена файлов не поддерживаются?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]