2017-11-04 4 views
0

내 상황이 여기에 있습니다. 사용자가 수행하는 작업 (버튼/토글/텍스트 상자/등 ..)에 따라 Excel 시트를 편집하는 Application Windows Form을 만들었습니다.Outlook 전자 메일 본문에 클립 보드에서 이미지를 붙여 넣는 방법?

편집이 완료되면 새 Excel 파일이 생성됩니다.

그러면 programm가 셀 범위를 선택하고 복사합니다. 클립 보드로 이동합니다.

나는() {} else {}/.jpg/등으로 저장하면 여러 테스트를 수행했으며 모든 것이 true로 확인되었습니다.

내 이미지에 첨부하고 싶지 않습니다. 일시적으로 저장하지 않고 저장된 .jpg 파일을 통해 본문에 붙여 넣기를 원하지 않습니다. "그냥"내 Outlook 전자 메일 본문에 Ctrl + V를 만들고 싶습니다.

public void ReadData() 
{ 
    Excel excel = new Excel(@"E:\c#\Project#XX\Resources\TEST.xlsx", 1); 
    excel.CopyRange(0, 0, 32, 12); 

    IDataObject iData = Clipboard.GetDataObject(); 

    if (iData.GetDataPresent(DataFormats.Bitmap)) 
    { 
     Bitmap MessageBody = (iData.GetData(DataFormats.Bitmap, true) as Bitmap); 
     //pbx.Image = Image; 
     //image.Save(@"E:\c#\Project#XX\Resources\bitmap1.jpg", System.Drawing.Imaging.ImageFormat.Jpeg); 
     //MessageBody = image; 
    } 
    excel.Close(); 
    excel.Quit(); 
} 

가 여기 내 메시지 건물 코드입니다 : (i가 다른 지역을 통해 호출 할 수 있도록 공공 문자열로 상단에 선언 "MessageBody") 난 내 클립 보드에서 이미지를 얼마나 여기

입니다 : 이전 버전에서

private void flatCustButton013_Click(object sender, EventArgs e) 
{ 
    ReadData(); 
    string MessageSubject = $"SomeSubject"; 
    Outlook.MailItem newMail = (Outlook.MailItem)application.CreateItem(Outlook.OlItemType.olMailItem); 
    newMail.Subject = MessageSubject; 
    newMail.BodyFormat = Outlook.OlBodyFormat.olFormatHTML; 
    MessageHTMLBody = "<html><body>SomeText.<img src="cid:MessageBody"</img></body></html>"; 
    newMail.HTMLBody = MessageHTMLBody; 
    //newMail.Body = System.Windows.Input.ApplicationCommands.Paste; 
    //newMail.Display(false); 
    //newMail.BodyFormat = Outlook.OlBodyFormat.olFormatHTML; ; 
    //newMail.HTMLBody = System.Windows.Input.ApplicationCommands.Paste; 
    //newMail.Body = MessageBody; 
    newMail.To = ToAddress; 
    newMail.SentOnBehalfOfName = FromAddress; 
    newMail.CC = CcAddress; 
    newMail.BCC = BccAddress; 

    //System.Windows.Input.ApplicationCommands.Paste; 
    //wrdEdit = application._Inspector.WordEditor 

    newMail.Send(); 
} 

, 사람들은, Excel 파일을 열고 수동으로 세포를 변경 한 다음 (VB에서 매크로) 버튼을 클릭했다. 이미지를 붙여 넣은 상태에서 Outlook 전자 메일 항목을 열면 (표시 : true) "보내기"를 클릭하기 만하면됩니다.

My 2.0 버전은 "Send/Generated Excel Sheet //"버튼을 클릭하면 자동으로 수행됩니다.

Sub SendMail() 

    Dim Messager As New Outlook.Application 
    Dim Mail As Outlook.MailItem 
    Dim WrdEdit 

    Range("my_range").CopyPicture 

    Set Messager = New Outlook.Application 
    Set Mail = Messager.CreateItem(olMailItem) 

    With Mail 
     .To = "some folks" 
     .CC = "some folks" 
     '.BCC = "" 
     .Subject = "SomeSubject" 
     .Display 
     .HTMLBody = Mess + .HTMLBody 
    End With 

    Set WrdEdit = Messager.ActiveInspector.WordEditor 

    WrdEdit.Application.Selection.Paste 

    Set WrdEdit = Nothing 
    Set Messager = Nothing 
    Set Mail = Nothing 

ActiveWorkbook.Close SaveChanges:=False 

End Sub 

하지만 난 클립 보드의 이미지를 검색에 성공하고있어 만약 내가 (내가에 대한 지식이없는) 검사기를 통과 왜 내가하지 않습니다

여기 VB에서 매크로 코드입니다.

+0

나는이 사용하려고했습니다 | 'newMail.Attachments.Add ("E @ : \ C# 프로젝트 # XX \ 자료 \의 bitmap1.jpg, Outlook.OlAttachmentType.olEmbeddeditem, 1 \ Type.Missing)가 그 상단에 몸에 첨부 파일을 박았 MSDN 소스에 지정된 동안' 그리고 메시지, 첨부 파일, 빈 몸을 전송 나는 그것을 얻지 않는다 . . –

답변

0

로컬 저장된 파일의 첨부 파일을 메일에 추가하고 HTML로 본문에 표시하는 방법을 발견했습니다. 그래서 같이

:

newMail.BodyFormat = Outlook.OlBodyFormat.olFormatHTML; 

Outlook.Attachment attachment = newMail.Attachments.Add(@"path.imageformat", Outlook.OlAttachmentType.olEmbeddeditem, null, $"someTitle"); 

string imagecid = "whatever"; 

attachment.PropertyAccessor.SetProperty("http://schemas.microsoft.com/mapi/proptag/0x3613041E", imagecid); 

newMail.HTMLBody = String.Format("<body><img src=\"cid:{0}\"></body>", imageCid); 

은 "http://schemas.microsoft.com/mapi/proptag/0x3712001E"코드는 여기에 있습니다 : http://www.outlookcode.com/codedetail.aspx?id=1915.

그리고 작동합니다.

그러나 실제로 코드에 URL이있는 것이 좋지 않습니다. 다른 방법이 있습니까?

또한 내 'imagecid'문자열에 아무 것도 변경되지 않은 것처럼 보입니다.

나는 코드로 무엇을했는지 이해하려고 노력하고 있으며, 단지 그것이 그대로 작동하도록하는 것이 아닙니다.

응용 프로그램을 통해 작업하기 위해 Office로부터 승인이 필요합니까? 특히 몸에 이미지를 붙여 넣으려고 할 때 (픽셀 데이터 이외의 다른 것들을 포함 할 수 있음).

VB 스크립트에서이 자동 화가 필요하지 않았다면 Outlook의 "메일 보내기"버튼을 "physicly/humanly"해야했기 때문입니다.

다른 가능성이 있습니까? 내 몸에 붙여 넣기 위해 여전히 파일을 사용하고 있습니다. Ctrl + C Ctrl + V를 프로그래밍 방식으로 만들 수 없습니까? :(