API를 사용하지 않고 VBA에서 Gmail 만들기

14978 단어 VBAExcel

개요



VBA에서 Gmail 이메일을 만드는 방법을 설명합니다.
  • 작은 메일을 보내는데 일부러 API를 사용할 수 있도록 하는 것은 귀찮습니다.
  • 직접 보내기 버튼을 눌러 확실하게 전송되었는지 확인하고 싶습니다.

  • 아니, 스스로 송신 버튼을 누르는 것 자체로 귀찮게, 매크로 실행하면 이제 마음대로 보내 주는 분은, 이 방법은 추천하지 않습니다.

    또한 VBA로 메일을 작성이라고 썼습니다만, 실제로 만드는 것은 URL입니다.
    VBA에서 URL을 만들고,
    그 URL을 브라우저로 표시시키는 구조가 됩니다.

    VBA에서 Gmail 이메일 작성 화면 표시



    목적지, 제목, 본문에 따라 메일을 작성합니다.
    절차로서는 URL 작성 → URL 열기 → 제출 버튼을 사용자가 클릭하는 흐름입니다.

    URL 작성


    https://mail.google.com/mail/?view=cm 이 URL에 파라미터를 연결시킵니다.
    파라미터는 이하와 같다(거의 만마입니다)


    매개변수
    의미


    &to=
    To

    &cc=
    Cc

    &bcc=
    Bcc

    &su=
    제목

    &body=
    본문


    본문, 제목, To, Cc, Bcc를 전달하여 URL을 반환하는 프로시저를 만듭니다.

    URL 작성
    Private Function getUrl(body As String, Optional subj As String = "", Optional addr As String = "", Optional cc As String = "", Optional bcc As String = "") As String
        Dim url As String: url = "https://mail.google.com/mail/?view=cm"
        Dim prams(4) As String
        prams(0) = IIf(Len(addr) > 0, "&to=" & addr, "")
        prams(1) = IIf(Len(cc) > 0, "&cc=" & cc, "")
        prams(2) = IIf(Len(bcc) > 0, "&bcc=" & bcc, "")
        prams(3) = IIf(Len(subj) > 0, "&su=" & subj, "")
        prams(4) = "&body=" & encodeText(body)
        getUrl = url & Join(prams, "")
    End Function
    
    '文字列エンコード
    Private Function encodeText(text As String) As String
        Dim enc As Variant: enc = Split("[-]-%-\-#-'-|-`-^-""-<->-{-}-;-?-:-@-&-=-+-$-,", "-")
        Dim e As Variant
        For Each e In enc
            text = Replace(text, e, Application.WorksheetFunction.EncodeURL(e))
        Next e
        encodeText = Replace(text, vbLf, "%0D%0A")
    End Function
    

    문자열 인코딩은 URL에서 사용할 수없는 것만 인코딩하고,
    마지막으로 vbLf%0D%0A로 바꿉니다.
    제목은 왠지 인코딩한 문자가 그대로 표시되므로 인코딩하지 않습니다.
    (인코드하지 않으면 에러가 되는 문자도 있을지도)

    URL 열기



    VBA에서 명령줄을 실행하여 URL을 엽니다.

    VBA에서 start 명령으로 URL 열기
    Private Sub openUrl(url As String)
        CreateObject("WScript.shell").Run "cmd /c start" & " " & String(2, Chr(34)) & " " & Chr(34) & url & Chr(34), 0, True
    End Sub
    

    그건 그렇고, 명령은 결과적으로 다음과 같습니다.

    명령
    
    cmd /c start "" https://mail.google.com/mail/?view=cm...
    

    메일 작성



    함수가 생겼으므로 조속히 실행합니다.


    main
    Public Sub main()
        Dim addr As String: addr = Range("C2").Value
        Dim cc As String: cc = Range("C3").Value
        Dim subj As String: subj = Range("C5").Value
        Dim body As String: body = Range("C6").Value
    
        Dim url As String: url = getUrl(body, subj, addr, cc)
        Call openUrl(url)
    End Sub
    
    

    실행 결과




    이 URL을 만들어 메일 보내기 화면을 표시하는 방법은 웹 버전의 Outlook에서도 가능합니다.
    그러나 Outlook에서는 제목과 본문을 URL에 연결할 수 있었지만 대상은 To만 연결할 수 있었습니다.
    CC, BCC는 대응하지 않는 것 같습니다.URL:https://outlook.office365.com/mail/deeplink/compose?

    매개변수
    의미


    subject=
    제목

    body=
    본문

    to=
    To



    outlook 버전 getUrl 함수
    Private Function getUrl(body As String, Optional subj As String, Optional addr As String) As String
        Dim url As String: url = "https://outlook.office365.com/mail/deeplink/compose?"
        Dim prams(2) As String
        prams(0) = "&body=" & encodeText(body)
        prams(1) = IIf(Len(subj) > 0, "&subject=" & subj, "")
        prams(2) = IIf(Len(addr) > 0, "&to=" & addr, "")
        getUrl = url & Join(prams, "")
    end Function
    

    참고 사이트


  • 【URL 링크】의 클릭으로 Gmail 작성 화면을 내는 방법(받는 사람, 제목의 자동 삽입)
  • URL에서 사용할 수 있는 문자, 사용할 수 없는 문자
  • Outlook on the Web의 새 메일 만들기 화면을 여는 하이퍼링크
  • 좋은 웹페이지 즐겨찾기