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

C# Asp.net Core

View에서 활용한 inject 에 대해 설명하세요.

 

 

참고

 

SMALL

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

C#] SMTP 파일 첨부 및 본문 이미지(Base64 인코딩) 전송  (0) 2021.12.07
[Error Report] Asp.Net Core IIS 게시오류  (0) 2021.10.01
C# Build Error  (0) 2020.09.07
C# 메일전송 참조  (0) 2019.11.20
C# ] Dll 참조  (0) 2019.10.02
 [STAThread]
        static void Main()
        {
            AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(MyResolveEventHandler);
            ApplicationSetConfig();
            ApplicationStart();
        }
        
        private static Assembly MyResolveEventHandler(object sender, ResolveEventArgs args)
        {
            Assembly thisAssembly = Assembly.GetExecutingAssembly();
                string resourceName = null;
                string fileName = args.Name.Substring(0, args.Name.IndexOf(',')) + ".dll";
                foreach (string name in thisAssembly.GetManifestResourceNames())
                {
                    if (name.EndsWith(fileName))
                    {
                        resourceName = name;
                    }
                }

                if (resourceName != null)
                {
                    using (Stream stream = thisAssembly.GetManifestResourceStream(resourceName))
                    {
                        if (stream != null)
                        {
                            byte[] assembly = new byte[stream.Length];
                            stream.Read(assembly, 0, assembly.Length);
                            Console.WriteLine("Dll file load : " + resourceName);
                            return Assembly.Load(assembly);
                        }
                    }
                }
                return null;

        }

 

Ps: Dll 버전이 변경시 주의해서 변경해야함.

 

참조 링크 : http://trudy.kr/146

 

[C#] dll을 포함한 단일 exe배포 방법

일반적으로 프로그램을 배포시 exe파일과 Applica…

trudy.kr

 

SMALL

저와 같은 사람이..혹시나 있을까싶어서 남겨둡니다.

 

C#을 야매로 배워, 야매로 해나가는 상황이라 기초적인 지식이 많이 부족하지만 개발을 해나가고있는 개발자입니다.

(먹고살려면 어떻게든 해야지요....ㅠㅠ)

 

저와같이 무언가 설정을 막바꾸다가 디버그 및 릴리즈로 빌드가 되지 않을때 상단에 아이콘모양을 확인하세요!

동일한 모양에 평소와 다른 글자가 보일테니까요..

분명히.. F5번만 누르면 잘만되던 빌드가 갑자기 되지않을때 이부분을 확인해보세요..

평소와 같은 시작이 아닌 위에 그림과 같이 연결... 으로 되어있을 확률이 높습니다.!

이렇게 되어있는 이유가 프로젝트 속성에 시작프로젝트가 설정되어있지 않아서 발생한 문제입니다. 

다시 정상적으로 빌드 하기위해서는 프로젝트를 속성으로 가셔서 시작 프로젝트를 설정해주시면 정상적으로

빌드되는걸 보실수있으실껍니다.

SMALL

Dll 참조.

dll 참조 속성

1.Dll 참조 후 배포시 로컬복사 True 로 해야 해당 dll을 쓰는 프로그램이 클라이언트 PC에서 정상적으로 실행됨.

 

2.빌드시 참조된 Dll을 Dll 폴더에 넣어 관리하기.

Properties 설정

빌드전 이벤트 명령줄

if not exist "$(TargetDir)\Dll" mkdir "$(TargetDir)\Dll"

빌드 후 이벤트 명령줄

move "$(TargetDir)\*.dll" "$(TargetDir)\Dll"
del "$(TargetDir)\*.xml"
RD /S /Q "$(TargetDir)\de"
RD /S /Q "$(TargetDir)\es"
RD /S /Q "$(TargetDir)\ja"
RD /S /Q "$(TargetDir)\ru"

해당구문을 추가 후 빌드하면 exe실행파일의 경로에 Dll폴더가 없을시 폴더 생성 후 해당 폴더 안에

Dll파일을 이동시킴.

※ 위와 같이 처리시 Dll참조 경로를 app.conifg에도 참조 경로 관련 구문 추가해줘야함

app.config

SMALL

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

C# Build Error  (0) 2020.09.07
C# 메일전송 참조  (0) 2019.11.20
Show / ShowDialog  (0) 2019.10.01
연산자  (0) 2019.10.01
Windows Form Event 처리 순서  (0) 2019.09.30

+ Recent posts