API를 사용하지 않고 VBA에서 Gmail 만들기
개요
VBA에서 Gmail 이메일을 만드는 방법을 설명합니다.
아니, 스스로 송신 버튼을 누르는 것 자체로 귀찮게, 매크로 실행하면 이제 마음대로 보내 주는 분은, 이 방법은 추천하지 않습니다.
또한 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...
메일 작성
함수가 생겼으므로 조속히 실행합니다.
mainPublic 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
참고 사이트
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
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...
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
참고 사이트
Reference
이 문제에 관하여(API를 사용하지 않고 VBA에서 Gmail 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/yoshi_782/items/a5d0a3f7ef30f5a36962텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)