Как добавить возможность перетаскивания из Outlook в веб-форму? - PullRequest
6 голосов
/ 04 февраля 2010

Я ищу способ, позволяющий пользователям загружать электронные письма Outlook в веб-систему простым способом.

Я могу заставить это работать в ручном режиме для пользователей. Они могут перетаскивать электронную почту из Outlook на свой рабочий стол, который создает MSG-файл. Это работает очень хорошо, особенно если в письме есть вложения, которые также хранятся в MSG-файле. Этот файл затем может быть загружен с использованием традиционного HTML-поля «input type = file».

Я бы хотел упростить этот процесс, если это возможно. Я видел некоторые веб-сайты, которые имеют функцию «drag-n-drop» для загрузки файлов, существующих на жестком диске.

Однако я не уверен, существует ли что-либо, что позволяло бы выполнять прямое перетаскивание из Outlook, которое могло бы создать файл .msg или что-то подобное и обработать загрузку файла. Другими словами, решение, позволяющее исключить ручной шаг перетаскивания сообщения электронной почты на рабочий стол для создания временного MSG-файла для загрузки.

Возможно ли это, и если да, то как? Все пользователи в настоящее время работают под управлением Windows XP и имеют Outlook 2007, IE6 или более позднюю версию и Firefox. Внутренний сервер использует Java для рассматриваемого приложения (наш программист использует ASP.NET w / C # для нашей веб-разработки), хотя я предполагаю, что любое решение будет в значительной степени основано на технологии на стороне клиента, такой как Flash или JQuery.

Ответы [ 3 ]

4 голосов
/ 09 марта 2010

Не думаю, что вы достигнете этого с помощью jQuery / JavaScript - у вас может быть шанс с чем-то вроде Flash.

В качестве альтернативы, вы могли бы создать простое клиентское приложение, которое они могли бы запускать на своем рабочем столе, что позволяет им перетаскивать сообщение - таким образом, вы можете работать с полным доверием и выполнять любые задачи, которые вы хотите получить файл и загрузите его из этого приложения (это было решение, используемое приложением для сканирования файлов, над которым я когда-то работал - у нас было небольшое окно, в которое пользователи могли перетащить файл или сообщение электронной почты, чтобы начать загрузку в хранилище сканирования.

2 голосов
/ 17 февраля 2012

Как вы в конце концов реализовали это? Я искал похожее решение, но не смог найти ничего, так что я использовал макрос VBA в Outlook, который они нажимают, когда выбирается сообщение. Затем сообщение копируется в виде MSG во временную папку, а затем отправляется в HTML-форму.

Я добавил код, который я исправил, из различных веб-источников (в том числе здесь - извините, я не помню, чтобы сохранить ссылки) ниже на случай, если кто-нибудь захочет сделать то же самое.

Я уверен, что его можно оптимизировать и т. Д., Так как я очень плохо знаком с VBA (вчера!), Но сейчас он выполняет свою работу, хотя я думаю, что мне хотелось бы сделать это проверить, существует ли окно IE, и добавить новую вкладку чем открывать новый браузер при каждом нажатии.

' Function to maximize IE window
Declare Function apiShowWindow Lib "user32" Alias "ShowWindow" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long

Global Const SW_MAXIMIZE = 3
Global Const SW_SHOWNORMAL = 1
Global Const SW_SHOWMINIMIZED = 2

Sub test()
 'the mail we want to process
Dim objItem As Outlook.MailItem
 'question for saving, use subject to save
Dim strPrompt As String, strname As String
 'variables for the replacement of illegal characters
Dim sreplace As String, mychar As Variant, strdate As String
 'put active mail in this object holder
Set objItem = Outlook.ActiveExplorer.Selection.Item(1)
 'check if it's an email ... need to take a closer look cause
 'gives an error when something else (contact, task) is selected
 'because objItem is defined as a mailitem and code errors out
 'saving does work, if you take care that a mailitem is selected
 'before executing this code
If objItem.Class = olMail Then
     'check on subject
    If objItem.Subject <> vbNullString Then
        strname = objItem.Subject
    Else
        strname = "No_Subject"
    End If
    strdate = objItem.ReceivedTime
     'define the character that will replace illegal characters
    sreplace = "_"
     'create an array to loop through illegal characters (saves lines)
    For Each mychar In Array(" ", "/", "\", ":", "?", Chr(34), "<", ">", "¦")
         'do the replacement for each character that's illegal
        strname = Replace(strname, mychar, sreplace)
        strdate = Replace(strdate, mychar, sreplace)
    Next mychar
     'Prompt the user for confirmation
    strPrompt = "Upload the email to CRM?"
    If MsgBox(strPrompt, vbYesNo + vbQuestion) = vbYes Then
        Dim location As String
        Dim tempPath As String
        tempPath = IIf(Environ$("tmp") <> "", Environ$("tmp"), Environ$("temp"))
        location = tempPath & "\" & strname & "-" & strdate & ".msg"
        objItem.SaveAs location, olMSG
        'upload to IE
        UploadFile "http://intranet/test.php", location, "msgupload"
    End If
End If
End Sub

'******************* upload - begin
'Upload file using input type=file
Sub UploadFile(DestURL As String, FileName As String, _
  Optional ByVal FieldName As String = "File")
  Dim sFormData As String, d As String
  'Boundary of fields.
  'Be sure this string is Not In the source file
  Const Boundary As String = "---------------------------0123456789012"
  'Get source file As a string.
  sFormData = GetFile(FileName)
  'Build source form with file contents
  d = "--" + Boundary + vbCrLf
  d = d + "Content-Disposition: form-data; name=""" + FieldName + """;"
  d = d + " filename=""" + FileName + """" + vbCrLf
  d = d + "Content-Type: application/upload" + vbCrLf + vbCrLf
  d = d + sFormData
  d = d + vbCrLf + "--" + Boundary + "--" + vbCrLf
  'Post the data To the destination URL
  IEPostStringRequest DestURL, d, Boundary
End Sub

'sends URL encoded form data To the URL using IE
Sub IEPostStringRequest(URL As String, FormData As String, Boundary As String)
  'Create InternetExplorer
  Dim WebBrowser: Set WebBrowser = CreateObject("InternetExplorer.Application")
  'You can uncoment Next line To see form results
  WebBrowser.Visible = True
  'Send the form data To URL As POST request
  Dim bFormData() As Byte
  ReDim bFormData(Len(FormData) - 1)
  bFormData = StrConv(FormData, vbFromUnicode)
  ' Submit message to intranet
  WebBrowser.Navigate2 URL, , , bFormData, "Content-Type: multipart/form-data; boundary=" + Boundary + vbCrLf
  ' Maximize window
  apiShowWindow WebBrowser.hwnd, SW_MAXIMIZE
End Sub

'read binary file As a string value
Function GetFile(FileName As String) As String
  Dim FileContents() As Byte, FileNumber As Integer
  ReDim FileContents(FileLen(FileName) - 1)
  FileNumber = FreeFile
  Open FileName For Binary As FileNumber
    Get FileNumber, , FileContents
  Close FileNumber
  GetFile = StrConv(FileContents, vbUnicode)
End Function
'******************* upload - end

Простой PHP-скрипт для захвата файла:

<?php
if($_FILES['msgupload']){
move_uploaded_file($_FILES['msgupload']['tmp_name'], "./crm_uploads/".substr($_FILES['msgupload']['name'], 0 ,-24).".msg");
print("You are adding the email '".substr($_FILES['msgupload']['name'], 0, -24)."'");
print("<br />dated ".substr($_FILES['msgupload']['name'], -23, -4));
}
?>
0 голосов
/ 06 июня 2012

Вы можете попробовать

http://xupload.aspupload.com/

Это элемент управления ActiveX, поэтому только IE, но перетаскивание из перспективы не является проблемой.

...