Цитата:
Сообщение от
SIrina
У меня тоже ограничение на 70 символов. Есть идеи как обойти это ограничение? Нам реально это очень усложняет жизнь

Как вариант - при прикреплении вложений с длинными именами использовать параметр
contentName метода
SysMailerAttachments.add(...) с передачей в него краткого
'синонима' имени файла:
X++:
void add(str filename, str contentName='', str contentType='', str encodingType='BASE64', str charSet='US-ASCII', str customHeaders='')
Для примера набросал небольшой job:
X++:
static void jbAttachLongFileName(Args _args)
{
SysEmailParameters sysEmailParameters = SysEmailParameters::find() ;
SysMailer sysMailer ;
TextBuffer textBuffer ;
InventTable inventTable ;
str fileName ;
FileName contentName = "ContentName-ShortString" ;
Counter counter ;
#define.CharSet( "windows-1251" )
// TODO: прописать реальные почтовые адреса
#define.EmailFrom( "email_from@" )
#define.EmailTo( "email_to@" )
#File
;
// формирование содержимого файла - 20 позиций InventTable
textBuffer = new TextBuffer() ;
select inventTable ;
for( counter=0; counter<20 && inventTable; counter++ )
{
textBuffer.appendText( strfmt( "%1 - %2\n", inventTable.ItemId, inventTable.ItemName ) ) ;
next inventTable ;
}
fileName = strfmt( "%1_%2%3", contentName, strrep( "Xx", 100 ), #txt ) ;
info( strfmt( "Длинное имя файла для отправки [%1]: %2", strlen( fileName ), fileName ) ) ;
fileName = WinAPI::getTempPath() + fileName ;
textBuffer.toFile( fileName ) ;
textBuffer.replace( "\n", "<br>" ) ;
sysMailer = new SysMailer() ;
try {
sysMailer.SMTPRelayServers().add( sysEmailParameters.SMTPRelayServerName ,
sysEmailParameters.SMTPPortNumber ,
sysEmailParameters.SMTPServerIPAddress ,
sysEmailParameters.SMTPUserName ,
sysEmailParameters.SMTPPassword ) ;
sysMailer.fromAddress( #EmailFrom ) ;
sysMailer.tos().add( #EmailTo ) ;
sysMailer.subject( "InventTable" ) ;
sysMailer.HTMLBodyCharSet( #CharSet ) ;
sysMailer.htmlBody( textBuffer.getText() ) ;
sysMailer.attachments().add( fileName, contentName + #txt ) ;
sysMailer.sendMail() ;
}
catch
{
exceptionTextFallThrough() ;
}
}