Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.137.187.233] |
|
Сообщ.
#1
,
|
|
|
вот в чём проблема: все, кто сталкивался с отправкой данных из формы по e-mail сталкивались, наверное, с тем, что The Bat! с явной неохотой отправляет подобные сообщения, точнее говоря, вообще их не отправляет. На этот случай всплывает в памяти технология ActiveX, но как реализовать вставку определенного текста в код письма не знаю. Может кто подскажет, как обойтись без наворотов в межпрограммном взаимодействии, а если подобного простого пути нет, то может кто-нибудь кинет простенький примерчик с ActiveX на JavaScript
|
Сообщ.
#2
,
|
|
|
Все гораздо проще:
<a href="mailto:address@domain.com?subject=Тема письма&body=Содержимое сообщения">Текст ссылки</a> Это, конечно, если ты используешь mailto, а не серверный скрипт (тогда тебе в серверную часть). |
Сообщ.
#3
,
|
|
|
не всё так гладко - пишу следующую процу:
function SendOrderNow(th){ var strMail='mailto:name@domen.ru?subject=The_order&body='; var tab=document.getElementById("PostTab"); for (var i=1; i<tab.rows.length; i++) { var perO='SendZak.ta_'+i+'.value'; if (tab.rows[0].cells[2].innerText=='Кол-во') { strMail+=tab.rows[i].cells[1].innerText+' кол-во='+tab.rows[i].cells[2].innerText+' Описание='+eval(perO)+' /n'; } else { strMail+=tab.rows[i].cells[1].innerText+' Описание='+eval(perO)+' /n'; } } th.href=strMail; } так отправляется всякая хренотень: в таблице ведь по-русски написаны слова - он их в href загонять не хочет. Что делать в таком случае? P.S.: SendZak - форма ta_xxx - элемент формы типа textarea th - указатель this на ссылку, которой и присваиваем href |
Сообщ.
#4
,
|
|
|
Во-первых, надо указать кодировку (точно так же - &charset=windows-1251).
Во-вторых, нужна функция типа urlencode() (она есть в PHP, но не знаю, есть ли в JS). Могу ее написать, если в JS ее нет. |
Сообщ.
#5
,
|
|
|
Параметры значение параметров Subject, Body надо брать в кавычки. Твой код мне поднять не удалось, а свой написал - работает.
[html] <script> function mail(th) { var body = 'Привет! Это пробное письмо'; var subject = 'Привет, Roman!'; var to = 'some@wh.ere'; th.href = 'mailto:' + to + '?Subject="' + subject + '"&Body="' + body + '"'; } </script> <a href="#" onclick="mail(this);">Mail Me</a> [/html] У меня тока The Bat. Под другими не тестил;) |
Сообщ.
#6
,
|
|
|
Malicious Babai, вариант Rom@nych'а работает? Если да, то я могу спать спокойно.
Попробовал написать urlencode: function CharToHex(c) { var HEX_TABLE = "0123456789ABCDEF"; var got = c.charCodeAt(0); var left = 0; var result = ""; var result2 = ""; left = got % 16; result += HEX_TABLE.charAt(left); got = Math.floor(got/16); result += HEX_TABLE.charAt(got); for(var cnt = result.length; cnt >= 0; cnt--) result2 += result.charAt(cnt); return result2; } function str_urlencode(str) { var LAT_TABLE = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; var result = ""; var c = ""; for(var i = 0; i < str.length; i++) { c = str.charAt(i); if((LAT_TABLE.indexOf(c) == -1) && (c != '_') && (c != ' ')) { result += '%' + CharToHex(c); } else { if(c == ' ') result += '+'; else result += c; } } return result; } С обычными кодировками работает. Но с unicode символами - жестокий облом. |
Сообщ.
#7
,
|
|
|
Понимаешь, в чём бяка. Я тоже хотел написать так, но когда я пишу строку
[html] <a href="mailto:some@wh.ere?Subject=Hello%20user&Body=Some%20text">Mail!</a> [/html] оно тоже не работает. Поэтому - кавычки рулят%) |
Сообщ.
#8
,
|
|
|
Закрываем тему.
|
Сообщ.
#9
,
|
|
|
Rom@nych, у меня при отправке слова Прювет (заключенного в кавычках) в теле письма помещается вот такая запись: " 2CF0F0FFE0E2EE52F2 ". Думаю согласишься, что выглядит довольно-таки нечитабельно (хотя без кавычек и этого нет). Тоже самое происходит при отправке всей таблицы (разница только в результирующем выражении)
Trustmaster, я с PHP знаком весьма слабо, но судя по твоему коду я так понял, что urlencode() преобразует кириллицу (и другие нелатинские литеры) к 16-тиричному формату. Я вставляю твою функцию в код и получается такая строка: str=str_urlencode(strBody)+'charset=windows-1251'; th.href=strMail+str; функция как доходит до этого фрагмента, так вообще перестает выполняться. Может я не правильно что-то понял или сделал - поправь меня, пожалуйста. В JS есть функция преобразования строки к ASCII-кодированной строке escape(), но она тож не ах-ти как помогает. К примеру, тот же "Прювет" выводит в теле письма вот таким образом: " 2u041F0u04400u044E0u04320u04350u0442 " В общем, ерундистика какая-то получается P.S.: уж извиняйте, что раз в день на форуме бываю и не отвечаю сразу - рабочий график не позволяет |
Сообщ.
#10
,
|
|
|
Я функцию на JS написал! Попробуй так:
th.href='mailto:address@domain.com?subject=Subject&charset=windows-1251&body=' + str_urlencode(strBody); Только эта функция с unicode символами работать не будет (а набирается, скорее всего, юникод) - вот в чем проблема. Можно еще использовать html-макросы (&1024; например) и content-type=text/html. Тебе так пойдет? |
Сообщ.
#11
,
|
|
|
Malicious Babai, выложи всю страницу (если там нет супер секюрной инфы;)) и мы попробуем в ней разобраться:) А не под The bat'ом пробовал? Мой код работает (в таком виде как я написал). Можно ещё и систему для прикола указать;))
|
Сообщ.
#12
,
|
|
|
Trustmaster, да я понял, что проца на JS написана - я про то говорил, что не знал до этого момента назначения данной функциии (а она ведь из PHP, в принципе, взята).
Цитата Можно еще использовать html-макросы (&1024; например) а можно поподробнее с этого момента, а то у меня понятие об html-макросах весьма туманное. Цитата и content-type=text/html. т.е. в мета-тэгах прописать? так это всё и так прописано и кодировка выставлена win-1251, так что Юникод здесь не виноват. Что-то здесь другое, при чём самое интересное, что из IE6 SP1 отправка сообщения по предложенному тобой методу осужществляется примерно в таком виде: @@15-17,5 1 а /n ( 1,5-10; Ш250-1500 Ђ 1 а /n (это две строки из таблицы), а Opera 7.10 вообще отказывается глотать эти скрипты и блокирует выполнение всех действий на странице ( при этом не выполняются ряд процедур не причастные к отправке сообщений) |
Сообщ.
#13
,
|
|
|
Rom@nych, по твоей просьбе выкладываю... тока учтите, что сначала пускается файл ааа2.htm , а потом уже в файле заказа происходит отправка по мылу (т.е. между формами данные передаются между всем этим)... странички тестовые, так что графику к ним не прилагаю и замечания по поводу дизайна просьба не высказывать как тока скрипты все напишу и дизайн проработаю обязательно выложу линк для оценки в соответствующем разделе
Прикреплённый файл2.zip (7.49 Кбайт, скачиваний: 124) |
Сообщ.
#14
,
|
|
|
Функция urlencode взята из протокола HTTP, она применяется для отправки данных скриптам. Данный код я перевел со своей же функции на C#.
Что до html-макросов, то это тот же Гораздо лучше написать online форму и генерировать/отсылать письмо прямо из скрипта. Как насчет PHP/Perl? |
Сообщ.
#15
,
|
|
|
Trustmaster, начальство жадным бывает - потому на free-хостинге сижу пока что. Приходиться выпутываться посредством JS (если страницы смотрел, то заметил, что там и передача данных от одной формы к другой, и отправка по почте... в данный момент еще и над алгоритмом поиска в каталоге думаю... Всё это, без сомнения, проще и разумнее реализовать на PHP, но пока что сами всё видите...
|
Сообщ.
#16
,
|
|
|
Когда мы однажды обсуждали на форуме хостинг, я сказал то, что повторю тебе сейчас: за сколько лодку купишь, так она и поплывет. Так что придется тебе пока помучиться.
|
Сообщ.
#17
,
|
|
|
Trustmaster, в вопросе хостинга ты, без всякого сомнения, прав на все 100, но всё-таки приходиться довольствоваться тем, что есть. Хотелось бы услышать еще какой совет по JS в ракурсе данной темы, а то у меня тока одна идея в голове - писать процу OnTranslit(), которая переведет все русские буквы в английские... , но все-таки хочеться, чтобы тело письма на нормальном русском было
|
Сообщ.
#18
,
|
|
|
Могу сделать функцию перевода русского языка в макросы для подстановки в писмо в HTML. Тут 2 момента: 1) не все клиенты поддерживают html, 2) Размер такого письма в несколько раз больше.
|
Сообщ.
#19
,
|
|
|
Trustmaster, был бы благодарен, если алгоритмом поделишься (если, конечно, это не обычное замещение рус. символа html-кодом)... но этот варинт неприемлем, т.к. многие юзеры в последнее время настраивают mail-клиенты так, чтобы отправка писем осуществлялась в текстовом формате по умолчанию... хотя если генерировать на стороне клиента страничку и отправлять её уже потом по мылу (если такой вариант все-таки возможен), то идея очень неплохая... к сожалению, те кто защищен файрволом в этом случае наших стараний оценить не смогут
|
Сообщ.
#20
,
|
|
|
Кодом-то я поделюсь, без проблем:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Untitled Document</title> <meta http-equiv="Content-Type" content="text/html; charset=windows-1251"> <script> function safe_encode(str) { var LAT_TABLE = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; var result = ""; var c = ""; for(var i = 0; i < str.length; i++) { c = str.charAt(i); if(LAT_TABLE.indexOf(c) == -1) { result += '&' + str.charCodeAt(i) + ';'; } else { result += c; } } return result; } function mail(text, address, subject, aObj) { var href_str = ""; var safe_text = safe_encode(text); var mail_body = "<html><head><title>" + subject + "</title></head><body>" + safe_text + "</body></html>"; href_str = "mailto:" + address + "?subject=" + subject + "&charset=windows-1251&ctype=text/html&body=" + mail_body; aObj.href = href_str; return true; } </script> </head> <body> <a href="javascript:void(0)" onClick="mail('Будет чудо, если это сработает!', 'somewhat@somewhere.com', 'Coool!', this)">Ссылка</a> </body> </html> Но этот вариант не работает. Как оказалось, аттрибут href ограничен по длине, так что твой способ отправки писем не подходит вообще. Так что либо серверные скрипты, либо письма придется писать вручную. |
Сообщ.
#21
,
|
|
|
Хорошо что я в своё время не полинился написать функцию
конвертирующюу код символа из Unicode в Windows-1251. Пробуйте: [HTML] <html> <head> <title>Untitled Document</title> <meta http-equiv="Content-Type" content="text/html; charset=windows-1251"> <script language=JScript> function toWin(N) { /*код громоздкий, но шустрый */ if(N<=127)R=N;else if(1040<=N&&N<=1103)R=N-848;else if(1026<=N&&N<=1027)R=N-898;else if(N==8218)R=130;else if(N==1107)R=131;else if(N==8222)R=132;else if(N==8230)R=133;else if(8224<=N&&N<=8225)R=N-8090;else if(N==8364)R=136;else if(N==8240)R=137;else if(N==1033)R=138;else if(N==8249)R=139;else if(N==1034)R=140;else if(N==1036)R=141;else if(N==1035)R=142;else if(N==1039)R=143;else if(N==1106)R=144;else if(8216<=N&&N<=8217)R=N-8071;else if(8220<=N&&N<=8221)R=N-8073;else if(N==8226)R=149;else if(8211<=N&&N<=8212)R=N-8061;else if(N==0)R=152;else if(N==8482)R=153;else if(N==1113)R=154;else if(N==8250)R=155;else if(N==1114)R=156;else if(N==1116)R=157;else if(N==1115)R=158;else if(N==1119)R=159;else if(N==160)R=160;else if(N==1038)R=161;else if(N==1118)R=162;else if(N==1032)R=163;else if(N==164)R=164;else if(N==1168)R=165;else if(166<=N&&N<=167)R=N;else if(N==1025)R=168;else if(N==169)R=169;else if(N==1028)R=170;else if(171<=N&&N<=174)R=N;else if(N==1031)R=175;else if(176<=N&&N<=177)R=N;else if(N==1030)R=178;else if(N==1110)R=179;else if(N==1169)R=180;else if(181<=N&&N<=183)R=N;else if(N==1105)R=184;else if(N==8470)R=185;else if(N==1108)R=186;else if(N==187)R=187;else if(N==1112)R=188;else if(N==1029)R=189;else if(N==1109)R=190;else if(N==1111)R=191; else R=63;//символ вопроса - '?' return R; } function uni2winEsc(s) { var res=''; for(var i=0;i<s.length;i++) res+="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_.!~*'()#".indexOf( s.charAt(i) )>= 0 ? s.charAt(i) : "%"+toWin(s.charCodeAt(i)).toString(16).toUpperCase(); return res; } function mail(text, address, subject) { location.href="mailto:" + address + "?subject=" + uni2winEsc(subject) + "&charset=windows-1251&body=" + uni2winEsc(text) } </script> </head> <body> <a href="javascript:void(0)" onClick="mail('Ну как? Работает?', 'somewhat@somewhere.com', '! Тема !')">Ссылка</a> </body> </html> [/HTML] |
Сообщ.
#22
,
|
|
|
Хочу сразу (пусть и с большим запозданием) извиниться перед Rom@nych, т.к. его код работает, но исключительно через IE, а потому он мне не подошел... Не знаю, чего эт я тогда сказал, что он совсем не рабочий???
Mixxx, function SendOrderNow() { var tab=document.getElementById("PostTab"); var strBody=''; var str; for (var i=1; i<tab.rows.length; i++) { var perO='SendZak.ta_'+i+'.value'; if (tab.rows[0].cells[2].innerText=='Кол-во') { strBody+=tab.rows[i].cells[1].innerText+' кол-во='+tab.rows[i].cells[2].innerText; strBody+=' Описание='+eval(perO)+' /n'; } else { strBody+=tab.rows[i].cells[1].innerText+' Описание='+eval(perO)+' /n'; } } location.href='mailto:company@domen.ru?subject=The_Order&charset=windows-1251&body="'+uni2winEsc(strBody)+'"'; } не работает как под IE6, так и под Opera 7.10... даже если в uni2winEsc() изменять значение входящего параметра для toString()... мож я чего не понимаю? Проверял с отдельными словами - эффект тот же |
Сообщ.
#23
,
|
|
|
Malicious Babai
Кавыки( " ) уберите: location.href='mailto:company@domen.ru?subject=The_Order&charset=windows-1251&body='+uni2winEsc(strBody); А у вас в опере просто ссылка [html] <a href="mailto:xxx@mail.ru">mailto test</a> [/html] работает??? |
Сообщ.
#24
,
|
|
|
Еще как! А ты сомневаешься?
Значит проблема в том, что Опера обрубает строку в href символах так на 256-ти. |
Сообщ.
#25
,
|
|
|
Mixxx, все ссылки в Опере работают превосходно... и не только ссылки, но также и направление через location.href тоже
кстати, нашел ошибку в собственном коде, из-за которой uni2winEsc(strBody) не срабатывала, так что можете не переживать - функция рабочая, но через Оперу она в майл-клиент записывает следующее: Цитата 2C2CE5EEDEF2FE8EEBEFFFF2FEEEF0FFB BEA--EE=1 ECEDEF= // а там должна быть строка следующего типа Цитата Вентиляторы к-во=1 Оп=// т.е. результат ровным счетом тот же, что и без применения этой функции Trustmaster, на этот случай можно предусмотреть ограничение по количеству отправляемых элементов... хотя тут возникает серьезное неудобство, но другого выхода не вижу, ежели href ограничен величниной стандартной строки |
Сообщ.
#26
,
|
|
|
Trustmaster, кстати, мы с тобой оказались неправы в том, что строка URL-адреса должна быть не более 255 символов... Только в тело письма Опера 7+ передает до 500 символов, а IE, как минимум, раза в полтора больше , и это не говоря о сабже письма, адресе и пресловутом mailto:
|