O'Reilly logo

Sendmail, 3rd Edition by Bryan Costales

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

Reject Excess 8-Bit Characters

Much of the spam email that arrives from the Far East (especially Korea and China) is sent with Subject: headers that contain unencoded 8-bit characters. Because 8-bit characters in the Subject: header are illegal, it is perfectly OK to reject such email.

In this section we show you how to write a routine that can reject 8-bit Subject: headers using the checkcompat( ) routine. In the following example, the numbers to the left are for reference and are not a part of the code.

1  int
2  checkcompat(to, e)
3          register ADDRESS *to;
4          register ENVELOPE *e;
5  {
6          char *cp, *h;
7          int len, cnt;
8   
9          if (!bitnset(M_LOCALMAILER, to->q_mailer->m_flags))
10                 return EX_OK;
11  
12         if ((h = hvalue("subject", e->e_header)) =  = NULL)
13                 return EX_OK;
14        
15         if ((len = strlen(h)) =  = 0)
16                 return EX_OK;
17
18         cnt = 0;
19         for (cp = h; *cp != ''; ++cp)
20         {
21                 if ((*cp & 0x80) != 0)
22                         ++cnt;
23         }
24         if ((cnt * 2) > len)
25         {
26                 e->e_flags |= EF_NO_BODY_RETN;
27                 e->e_message = "553 Cannot accept eight-bit subjects";
28                 to->q_status = "5.7.1";
29                 return EX_UNAVAILABLE;
30         }
31         return EX_OK;
32 }

We begin (line 2) by declaring checkcompat( ) the same way it is declared inside conf.c. The two arguments (*to and *e) passed to it are described in the first section of this appendix.

Our routine for rejecting 8-bit characters in the Subject: header requires four local variables (line 6). The *h will point to the value of the Subject: header. The *cp will be walked through *h looking ...

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required