SMTP를 이용해 메일 기능을 구현시 첨부 파일 및 본문에 이미지가 포함되어 전송될경우

Google Mail 같은경우에는 이미지가 짤리는 현상이 발생한다.

이와 같은 현상이 발생할 경우에는 아래 소스와 같이 처리하면 된다.

 

- Main 메일 전송코드

//Mail Send Main Code
MailMessage mail = new MailMessage();

mail.From = new Mailaddress("FormEmail@mail.com");

AlternateView alterView = ContentToAlternateView(html_body);
mail.AlternateViews.add(alterView);

- Base64 인코딩 이미지 첨부 

private static AlternateView ContentToAlternateView(string content)
{
            var imgCount = 0;
            List<LinkedResource> resourceCollection = new List<LinkedResource>();
            foreach(Match m in Regex.Matches(content, "<img(?<value>.*?)>"))
            {
                imgCount++;
                var imgContent = m.Groups["value"].Value;
                string type = Regex.Match(imgContent, ":(?<type>.*?);base64,").Groups["type"].Value;
                string base64 = Regex.Match(imgContent, "base64,(?<base64>.*?)\"").Groups["base64"].Value;

                if(String.IsNullOrEmpty(type) || String.IsNullOrEmpty(base64))
                {
                    continue;
                }

                var replacement = " src=\"cid:" + imgCount + "\"";
                content = content.Replace(imgContent, replacement);
                var tempResource = new LinkedResource(Base64ToImageStream(base64), new ContentType(type))
                {
                    ContentId = imgCount.ToString()
                };

                resourceCollection.Add(tempResource);

            }

            AlternateView alternateView = AlternateView.CreateAlternateViewFromString(content, null, MediaTypeNames.Text.Html);

            foreach(var item in resourceCollection)
            {
                alternateView.LinkedResources.Add(item);
            }

            return alternateView;

}


 public static Stream Base64ToImageStream(string base64String)
{
            byte[] imageBtyes = Convert.FromBase64String(base64String);
            MemoryStream ms = new MemoryStream(imageBtyes, 0, imageBtyes.Length);
            return ms;
}

 

원본글 : https://stackoverflow.com/questions/39407474/add-attachment-base64-image-in-mailmessage-and-read-it-in-html-body

 

SMALL

'언어 > C#' 카테고리의 다른 글

[Error Report] Asp.Net Core IIS 게시오류  (0) 2021.10.01
[숙제] 2021.09.29  (0) 2021.09.29
C# Build Error  (0) 2020.09.07
C# 메일전송 참조  (0) 2019.11.20
C# ] Dll 참조  (0) 2019.10.02

+ Recent posts