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

Asp 로 개발된 Web Site 에서 발생한 문제.

링크를 통한 excel다운로드 기능이 구현된 asp 파일을 불러오는데,

파일명을 지정되지 않아 발생한 문제

 

Excel 다운로드시 Asp File Name 으로 파일이 다운로드 되는 현상.

 

 

 

//수정 전 코드
<% 
	filename = "recruit_list"
    Response.Buffer = TRUE
    Response.ContentType = "application/vnd.ms-excel"
    Response.AddHeader "Content-Disposition","attachment; filename="&filename&".xls"
 %>
 
 <%
 	~~ DB Data part
    
 %>
 
 <html>
<head>
<meta http-equiv="content-type" content="text/html; charset=euc-kr">
</head>
<body>
<h3>현황</h3>
<TABLE cellspacing="0" cellpadding="0" border="1" bordercolor="#222222" style="font-family:'돋움';  overflow:auto; word-break: break-all; width:100%; font-size:11px ">
<TR align=center height=70>
	<TD bgcolor=#FFD9B3><b>NO</TD>
	<TD bgcolor=#FFD9B3><b>성 명</TD>
	<TD bgcolor=#FFD9B3><b>생년월일</TD>
	<TD bgcolor=#FFD9B3><b>나이</TD>
	<TD bgcolor=#FFD9B3><b>비고</TD>
</TR>

 

//수정 후 코드
<% 
  Dim filename  : filename = "recruit_list"
  Response.Buffer = TRUE
  Response.AddHeader "Content-Disposition","attachment;filename=" & filename & ".xls" '한글 인코딩 깨지지 않게 보존
  Response.ContentType = "application/vnd.ms-excel"
 %>
 
 <%
 	~~ DB Data part
    
 %>
 
 <html>
<head>
<meta http-equiv="content-type" content="text/html; charset=euc-kr">
</head>
<body>
<h3>현황</h3>
<TABLE cellspacing="0" cellpadding="0" border="1" bordercolor="#222222" style="font-family:'돋움';  overflow:auto; word-break: break-all; width:100%; font-size:11px ">
<TR align=center height=70>
	<TD bgcolor=#FFD9B3><b>NO</TD>
	<TD bgcolor=#FFD9B3><b>성 명</TD>
	<TD bgcolor=#FFD9B3><b>생년월일</TD>
	<TD bgcolor=#FFD9B3><b>나이</TD>
	<TD bgcolor=#FFD9B3><b>비고</TD>
</TR>

 

의외로 간단히 해결됩니다....

모르는 상태에서.. IIS MIME 까지 확인해보기도하고.. 삽질을 많이했네요..

 

구글링 하니 한글폰트 깨지는 문제에 대해서는 많은 글들이 있던데.. 저와같은 유형은 없어서 ...

SMALL

Asp.net Core 로 개발된 웹 사이트를 게시하여 IIS에 배포 하였는데도 오류가 발생

 

IIS 에 Asp.net Core 설정 오류.

 

Step1. 응용프로그램 풀 확인

  - .Net CLR 버전이 관리코드없음으로 되어있는지 확인.

Step2. 구성편집기 확인

  - 구성편집기에 System.webServer/aspNetCore 가 설치되어있는지 확인.

SMALL

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

C#] SMTP 파일 첨부 및 본문 이미지(Base64 인코딩) 전송  (0) 2021.12.07
[숙제] 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

Error :

Couldn't process file ******.resx due to its being in the Internet or Restricted zone or having themark of the web on the file.

해결 방법

Project 폴더에 *.resx 파일을 검색하여, 해당 파일 속성에 들어가 차단 해제를 클릭하고 저장 후

Projcet 정리 후 ReBuild 합니다.

SMALL

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

[Error Report] Asp.Net Core IIS 게시오류  (0) 2021.10.01
[숙제] 2021.09.29  (0) 2021.09.29
C# 메일전송 참조  (0) 2019.11.20
C# ] Dll 참조  (0) 2019.10.02
Show / ShowDialog  (0) 2019.10.01
 [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

ITM_CODE 컬럼에 '▶' 문자가 포함된 Row 부터 출력.

ORDER BY DECODE(SUBSTR(ITM_CODE,0,1),'▶',ITM_CODE) 

SMALL

+ Recent posts