Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Схлопываются пробелы / 19 сообщений из 19, страница 1 из 1
14.06.2016, 14:02
    #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
14.06.2016, 14:13
    #39255721
MrShin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Схлопываются пробелы
Я бы не полагался на разгонку пробелами при пересылке информации в тексте письма, это в большинстве случаев приводит к похожим результатам. Посмотрите на альтернативные форматы: текстовый файл в виде аттачмента, html с таблицей, xls.

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

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

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


по буквам это так (вставила подчеркивание, чтобы снова не съело
&_n_b_s_p_;
...
Рейтинг: 0 / 0
14.06.2016, 16:48
    #39255872
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Схлопываются пробелы
ПЕНСИОНЕРКАпочта --это НТМЛ-файлВовсе даже необязательно...
...
Рейтинг: 0 / 0
14.06.2016, 17:22
    #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
14.06.2016, 17:26
    #39255911
sdku
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Схлопываются пробелы
Вдогонку - после b,естессно, запятая (куда делась ума не приложу)
...
Рейтинг: 0 / 0
14.06.2016, 17:40
    #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
14.06.2016, 17:43
    #39255923
MrShin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Схлопываются пробелы
sdku,

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

nbsp также может помочь, но все равно таблица расползется, если только не использовать моноширинный шрифт типа Курьера.
...
Рейтинг: 0 / 0
14.06.2016, 17:44
    #39255924
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Схлопываются пробелы
...
Рейтинг: 0 / 0
15.06.2016, 10:02
    #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
15.06.2016, 10:21
    #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
16.06.2016, 14:57
    #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
16.06.2016, 15:23
    #39257199
MrShin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Схлопываются пробелы
l-evgene,

Я использую этот код для автоматической отправки сообщений об ошибках разработчику, пользовался только gmail, другие сервера не пробовал использовать. Тонкости следующие:
1. Имя-пароль должны быть рабочими, зарегистрированными на gmail
2. Как правило при первой попытке отсылки gmail ничего не отправляет и шлет в зарегистрированный ящик и на запасной мейл сообщение о заблокированной попытке входа (посмотрите в ящик, под которым логинитесь).
3. Для разблокировки нужно разрешить ненадежным приложениям подключаться к ящику. Настройка довольно глубоко, в дополнительных настройках
4. Некоторым клиентам не удавалось отправить сообщения из корпоративной сети из-за настроек корпоративного фаервола. С этим, увы, ничего поделать нельзя без обращения к сетевикам. Что-то мне подсказывает, что у вас именно эта проблема.
...
Рейтинг: 0 / 0
17.06.2016, 10:25
    #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
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Схлопываются пробелы / 19 сообщений из 19, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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