powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Схлопываются пробелы
19 сообщений из 19, страница 1 из 1
Схлопываются пробелы
    #39255715
l-evgene
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.
При выполнении команды SendObject, все группы пробелов в теле письма "схлопываются" до одного. Т.е., текст должен выглядеть так:
Код: html
1.
2.
3.
4.
0,92x0,63x0,68 		52 кг 
0,12x0,43x0,8 		7 кг 		x2 

0,435 м3 		59 кг


а выглядит вот так:
Код: html
1.
2.
3.
4.
0,92x0,63x0,68 52 кг
0,12x0,43x0,8 7 кг x2

0,435 м3 59 кг


Пробовал вставлять кучу пробелов, использовал Chr(9)... ничего не помогает.

PS. Почта - Mozilla Thunderbird. Но в ее настройках на эту тему - ничего. Может, есть способ ее обмануть?
...
Рейтинг: 0 / 0
Схлопываются пробелы
    #39255721
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я бы не полагался на разгонку пробелами при пересылке информации в тексте письма, это в большинстве случаев приводит к похожим результатам. Посмотрите на альтернативные форматы: текстовый файл в виде аттачмента, html с таблицей, xls.

Одно из базовых правил верстки для полиграфии - рядом не должно быть более одного пробела. Письмо - это та же полиграфия, только в электронном виде.
...
Рейтинг: 0 / 0
Схлопываются пробелы
    #39255759
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
l-evgene,
Space а не Chr
но более правильно сказал MrShin
...
Рейтинг: 0 / 0
Схлопываются пробелы
    #39255794
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
l-evgeneа выглядит вот такНу так формат тела письма надо не HTML использовать, а plain text...
...
Рейтинг: 0 / 0
Схлопываются пробелы
    #39255831
sdkuSpace а не Chr Вы не правы, Chr(9) - табуляция. Но ТС это тоже не спасло.
Я бы вместо SendObject использовал отправку через CDO.
...
Рейтинг: 0 / 0
Схлопываются пробелы
    #39255849
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
l-evgeneChr(9)
это не пробелы --это табуляция
видимо надо на chr(160) заменить --неразрывный пробел
...
Рейтинг: 0 / 0
Схлопываются пробелы
    #39255850
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПЕНСИОНЕРКА,

а так как почта --это НТМЛ-файл, то там для получения пробелов вставляют  
...
Рейтинг: 0 / 0
Схлопываются пробелы
    #39255852
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПЕНСИОНЕРКА,

потеряла код --сьел форум


по буквам это так (вставила подчеркивание, чтобы снова не съело
&_n_b_s_p_;
...
Рейтинг: 0 / 0
Схлопываются пробелы
    #39255872
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПЕНСИОНЕРКАпочта --это НТМЛ-файлВовсе даже необязательно...
...
Рейтинг: 0 / 0
Схлопываются пробелы
    #39255906
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
Function my(str As String)
Dim a, b c,i
a = Split(str, ",")
b = 10
For i = 0 To UBound(a)
c = c & Space(b - Len(a(i)) + 1) & a(i)
Next
my = c
End Function


Код: vbnet
1.
2.
3.
4.
5.
6.
?my("aabcd,babcd,cd,d")       
      aabcd      babcd         cd          d
       aabc       babc          c       dabc
        aab        bab        cab        dab
         aa         ba         ca         da
          a          b          c          d
...
Рейтинг: 0 / 0
Схлопываются пробелы
    #39255911
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вдогонку - после b,естессно, запятая (куда делась ума не приложу)
...
Рейтинг: 0 / 0
Схлопываются пробелы
    #39255922
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
l-evgene,

Если все же нужна таблица в тексте, я поддержу идею насчет отправки в формате plain text. Используйте CDO для отправки, текст пишите в .TextBody, а не в .HTMLBody, это позволит избежать схлопывания.
Примеры использования CDO есть, например, здесь .

Я использую модуль под катом для отсылки сообщений через gmail, можно настроить на любой другой по аналогии. В параметрах есть признак html или plain.


Option Compare Database
Option Explicit

'// module with function for sending email thru Gmail server

Dim EmailAccount As String
Dim EmailErrorsTo As String
Dim EmailPassword As String



Public Sub Gmail(strSubject As String, strMessage As String, Optional strTo As String, Optional strCC As String = "", Optional strBCC As String = "", Optional blnHTMLFormat As Boolean = False)
'this code derived from:
' http://www.paulsadowski.com/wsh/cdo.htm




Const cdoSendUsingPickup = 1 'Send message using the local SMTP service pickup directory.
Const cdoSendUsingPort = 2 'Send the message using the network (SMTP over the network).

Const cdoAnonymous = 0 'Do not authenticate
Const cdoBasic = 1 'basic (clear-text) authentication
Const cdoNTLM = 2 'NTLM


Dim objMessage As Object
10 On Error GoTo ErrorHandler
20 Set objMessage = CreateObject("CDO.Message")
30 objMessage.Subject = strSubject
40 objMessage.FROM = EmailAccount
50 If IsMissing(strTo) Or strTo = "" Then
60 objMessage.To = EmailErrorsTo
70 Else
80 objMessage.To = strTo
90 End If
100 If blnHTMLFormat Then
110 objMessage.HTMLBody = strMessage
120 Else
130 objMessage.TextBody = strMessage
140 End If
150 If strCC <> "" Then
160 objMessage.cc = strCC
170 End If
180 If strBCC <> "" Then
190 objMessage.BCC = strBCC
200 End If

'==This section provides the configuration information for the remote SMTP server.

210 objMessage.Configuration.Fields.Item _
(" http://schemas.microsoft.com/cdo/configuration/sendusing") = 2

'Name or IP of Remote SMTP Server
220 objMessage.Configuration.Fields.Item _
(" http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.gmail.com"

'Type of authentication, NONE, Basic (Base64 encoded), NTLM
230 objMessage.Configuration.Fields.Item _
(" http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = cdoBasic

'Your UserID on the SMTP server
240 objMessage.Configuration.Fields.Item _
(" http://schemas.microsoft.com/cdo/configuration/sendusername") = EmailAccount

'Your password on the SMTP server
250 objMessage.Configuration.Fields.Item _
(" http://schemas.microsoft.com/cdo/configuration/sendpassword") = EmailPassword

'Server port (typically 25)
260 objMessage.Configuration.Fields.Item _
(" http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 465

'Use SSL for the connection (False or True)
270 objMessage.Configuration.Fields.Item _
(" http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True

'Connection Timeout in seconds (the maximum time CDO will try to establish a connection to the SMTP server)
280 objMessage.Configuration.Fields.Item _
(" http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 60

290 objMessage.Configuration.Fields.Update

'==End remote SMTP server configuration section==

300 DoCmd.Hourglass True
310 objMessage.send
320 DoCmd.Hourglass False

ExitHere:
330 On Error Resume Next
340 Set objMessage = Nothing
350 DoCmd.Hourglass False
360 Exit Sub

ErrorHandler:
370 Select Case Err
Case 0
380 Resume Next
390 Case Else
400 LogError Err.Number, Err.Description, Erl, "Gmail", "mdlGmail"
410 Resume ExitHere
420 End Select

End Sub

...
Рейтинг: 0 / 0
Схлопываются пробелы
    #39255923
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sdku,

Пробелы бесполезны в HTML.

nbsp также может помочь, но все равно таблица расползется, если только не использовать моноширинный шрифт типа Курьера.
...
Рейтинг: 0 / 0
Схлопываются пробелы
    #39255924
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Схлопываются пробелы
    #39256146
l-evgene
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ПЕНСИОНЕРКА, спасибо, получилось!
Приблизительно вот так:
Код: vbnet
1.
2.
3.
    For i=1 To n
        strТекст = strТекст & Left(text1(i) & String(30, Chr(160)), 30) & text2(i) & Chr(13) & Chr(10)                                            
    Next i


Идеально выровнять столбцы не получается, но таблица хорошо читабельна.
...
Рейтинг: 0 / 0
Схлопываются пробелы
    #39256167
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
l-evgeneполучилось!
Приблизительно вот так
То есть формат всё же HTML... ну так отформатируй HTML-тегами нормально в таблицу, чего фигнёй-то маяться?
Код: vbnet
1.
2.
3.
4.
5.
strТекст = "<table>"
For i=1 To n
        strТекст = strТекст & "<tr><td>" & text1(i) & "</td><td>" & text2(i) & "</td></tr>"
Next i
strТекст = strТекст & "</table>"
...
Рейтинг: 0 / 0
Схлопываются пробелы
    #39257179
l-evgene
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MrShin, решил воспользоваться Вашим советом
Код: 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.
Public Sub SendMailчерезCDO4()  'яндекс
On Error GoTo Ошибка
Dim objEmail As Object
Set objEmail = CreateObject("CDO.Message")
'objEmail.Configuration.Load -1 'cdoDefaults
    objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.yandex.ru"
    objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
    objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 465
    objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
    objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "name@yandex.ru"
    objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/senduserpassword") = "password"
    objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
'    objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/usemessageresponsetext") = True
'    objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/postusing") = 2
'    objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 60
'    objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/languagecode") = "ru"
'    objEmail.Configuration.Fields("urn:schemas:mailheader:content-language") = "windows-1251"
    objEmail.Configuration.Fields.Update
    objEmail.From = "name@yandex.ru"
    objEmail.To = "MailTo"
    objEmail.Subject = "Subject"
    objEmail.TextBody = "Text body"
    objEmail.Send
    Set objEmail = Nothing
Exit Sub
Ошибка:                                                                         'Обработка ошибки
MsgBox (Err.Description & "  " & Err.Number)
End Sub


Выдает ошибку (во вложении). Пробовал менять значения переменных (в разных комбинациях):
- sendusing (1, 2)
- smtpserverport (25, 465, 587)
- smtpusessl (-1, 0)
- smtpauthenticate (0, 1, 2)
Пробовал использовать сервера: "smtp.highperf.pro", "smtp.yandex.ru", "smtp.gmail.com"
Результат неизменный. Иногда выдает что-то вроде "транспорт не нашел сервер".
Закомментированные строчки на результат не влияют.
Не подскажете, где еще порыть?
...
Рейтинг: 0 / 0
Схлопываются пробелы
    #39257199
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
l-evgene,

Я использую этот код для автоматической отправки сообщений об ошибках разработчику, пользовался только gmail, другие сервера не пробовал использовать. Тонкости следующие:
1. Имя-пароль должны быть рабочими, зарегистрированными на gmail
2. Как правило при первой попытке отсылки gmail ничего не отправляет и шлет в зарегистрированный ящик и на запасной мейл сообщение о заблокированной попытке входа (посмотрите в ящик, под которым логинитесь).
3. Для разблокировки нужно разрешить ненадежным приложениям подключаться к ящику. Настройка довольно глубоко, в дополнительных настройках
4. Некоторым клиентам не удавалось отправить сообщения из корпоративной сети из-за настроек корпоративного фаервола. С этим, увы, ничего поделать нельзя без обращения к сетевикам. Что-то мне подсказывает, что у вас именно эта проблема.
...
Рейтинг: 0 / 0
Схлопываются пробелы
    #39257577
l-evgene
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нашел ошибку.
Если кому-то интересно:
Код: vbnet
1.
2.
    objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/senduserpassword") = "password"  'неправильно
    objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "password"   'правильно

Сообщение об ошибке: "Не удалось отправить сообщение на SMTP-сервер. Код ошибки транспорта: 0x80040217. Отклик сервера: not available"
Код ошибки аксес: -2147220975
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Схлопываются пробелы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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