将邮件项目拖放到vb.net桌面保存为指定文件夹的文件

毕设小屋 其他问答 1

求助:

邮件系统中,可以将邮件项目拖放到桌面,自动保存为文件。

问题:

通过vb.net,也实现同样的操作: 将邮件项目拖放到winform桌面(开发程序窗体),自动保存为指定目录下面的文件。

试了一下,代码如下,问题出在ms对象为nothing,无法获取对象。

对如何处理流数据,不太懂。

请高手帮忙、指导一下?[玫瑰][玫瑰]

回复

共5条回复 我来回复
  • 源码码头网
    这个人很懒,什么都没有留下~
    评论

    题主有否试过获取拖拽文件所在路径,直接拷贝这个路径的文件就行,我这里测试用Foxmail直接拖到textbox上Foxmail会生成临时文件。没outlook,题主可以自己试试outlook

    using System;
    using System.IO;
    using System.Windows.Forms;
    namespace WindowsFormsApp7
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
            private void evt_DragDrop(object sender, DragEventArgs e)
            {
                if (e.Data.GetDataPresent(DataFormats.FileDrop))
                {
                    var filePaths = (string[])(e.Data.GetData(DataFormats.FileDrop));
                    textBox1.Text+= string.Join("\r\n", filePaths);
                    foreach (var f in filePaths)
                        File.Copy(f, @"F:\Temp\" + Path.GetFileName(f),true);
                }
            }
            private void evt_DragEnter(object sender, DragEventArgs e)
            {
                e.Effect = DragDropEffects.All;
            }
        }
    }
    
    0条评论
  • 毕设驿站
    这个人很懒,什么都没有留下~
    评论

    你的邮件系统是不是用的OutLook 如果是,可以用下面的文档。

    Private Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long)
    Public Sub SaveAttach(MyItem As Outlook.MailItem)
        SaveAttachment MyItem, "C:\Data\MailAttached\"
        'MsgBox "附件已保存"
    End Sub
    Private Sub SaveAttachment(ByVal Item As Outlook.MailItem, path, Optional condition = "*")
        Dim olAtt As Outlook.Attachment
        Dim i As Integer
        Dim dateFormat
        dateFormat = Format(Now, "yyyy-mm-dd hh-mm-ss")
        If Item.Attachments.Count > 0 Then
            For i = 1 To Item.Attachments.Count
                Set olAtt = Item.Attachments(i)
                If olAtt.FileName Like condition Then
                    olAtt.SaveAsFile path & dateFormat & "_" & olAtt.FileName
                End If
            Next
        End If
        Set olAtt = Nothing
        Sleep 1000
    End Sub
    
    0条评论
  • 代码货栈
    这个人很懒,什么都没有留下~
    评论

    相当于是文件拖拽没有获取到文件路径的问题? 如果是的话,可以试下看看对不对

    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        Me.AllowDrop = True
    End Sub
    Private Sub Form1_DragDrop(sender As System.Object, e As System.Windows.Forms.DragEventArgs) Handles Me.DragDrop
        Dim files() As String = e.Data.GetData(DataFormats.FileDrop)
        For Each path In files
            MsgBox(path)
        Next
    End Sub
    Private Sub Form1_DragEnter(sender As System.Object, e As System.Windows.Forms.DragEventArgs) Handles Me.DragEnter
        If e.Data.GetDataPresent(DataFormats.FileDrop) Then
            e.Effect = DragDropEffects.Copy
        End If
    End Sub
    
    0条评论
  • 毕业设计货栈
    这个人很懒,什么都没有留下~
    评论

    把原本的ms赋值改成这个看看 ms = e.Data.GetData(DataFormats.Text, True) 或者改成 ms = e.Data.GetData(DataFormats.FileDrop, True)

    0条评论
  • 毕设工坊
    这个人很懒,什么都没有留下~
    评论

    估计是邮件系统和操作系统文件没有兼容,做不到直接拖拽。需要打通这个格式转换,才能实现直接的拖拽。你这边接收先要识别邮件系统中附件,再完成到文件的转换,但是这个不一定能成功,取决于拖拽和放置方法是否支持非文件格式。

    0条评论

发表回复

登录后才能评论