Question : Why does my email show [email protected]<wbr />k instead of my name@ from a form mail script?

Why does my email show [email protected]k instead of my name@ from a form mail script?
I have looked at the script but am unsure how to configure it and what bits to change.
I have attached the code for the script.
My website is http://www.satoricreative.co.uk/ContactUs.html
this is where the code for the form resides.
Many thanks
Code Snippet:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
173:
174:
175:
176:
177:
178:
179:
180:
181:
182:
183:
184:
185:
186:
187:
188:
189:
190:
191:
192:
193:
194:
195:
196:
197:
198:
199:
200:
201:
202:
203:
204:
205:
206:
207:
208:
209:
210:
211:
212:
213:
214:
215:
216:
217:
218:
219:
220:
221:
222:
223:
224:
225:
226:
227:
228:
229:
230:
231:
232:
233:
234:
235:
236:
237:
238:
239:
240:
241:
242:
243:
244:
245:
246:
247:
248:
249:
250:
251:
252:
253:
254:
255:
256:
257:
258:
259:
260:
261:
262:
263:
264:
265:
266:
267:
268:
269:
270:
271:
272:
273:
274:
275:
276:
277:
278:
279:
280:
281:
282:
283:
284:
285:
286:
287:
288:
289:
290:
291:
292:
293:
294:
295:
296:
297:
298:
299:
300:
301:
302:
303:
304:
305:
306:
307:
308:
309:
310:
311:
312:
313:
314:
315:
316:
317:
318:
319:
320:
321:
322:
323:
324:
325:
326:
327:
328:
329:
330:
331:
332:
333:
334:
335:
336:
337:
338:
339:
340:
341:
342:
343:
344:
345:
346:
347:
348:
349:
350:
351:
352:
353:
354:
355:
356:
357:
358:
359:
360:
361:
362:
363:
364:
365:
366:
367:
368:
369:
370:
371:
372:
373:
374:
375:
376:
377:
378:
379:
380:
381:
382:
383:
384:
385:
386:
387:
388:
389:
390:
391:
392:
393:
394:
395:
396:
397:
398:
399:
400:
401:
402:
403:
404:
405:
406:
407:
408:
409:
410:
411:
412:
413:
414:
415:
416:
417:
418:
419:
420:
421:
422:
423:
424:
425:
426:
427:
428:
429:
430:
431:
432:
433:
434:
435:
436:
437:
438:
439:
440:
441:
442:
443:
444:
445:
446:
447:
448:
449:
450:
451:
452:
453:
454:
455:
456:
457:
458:
459:
460:
461:
462:
463:
464:
465:
466:
467:
468:
469:
470:
471:
472:
473:
474:
475:
476:
477:
478:
479:
480:
481:
482:
483:
484:
485:
486:
487:
488:
489:
490:
491:
492:
493:
494:
495:
496:
497:
498:
499:
500:
501:
502:
503:
504:
505:
506:
507:
508:
509:
510:
511:
512:
513:
514:
515:
516:
517:
518:
519:
520:
521:
522:
523:
524:
525:
526:
527:
528:
529:
530:
531:
532:
533:
534:
535:
536:
537:
538:
539:
540:
541:
542:
543:
544:
545:
546:
547:
548:
549:
550:
551:
552:
553:
554:
555:
556:
557:
558:
559:
560:
561:
562:
563:
564:
565:
566:
567:
568:
569:
570:
571:
572:
573:
574:
575:
576:
577:
578:
579:
580:
581:
582:
583:
584:
585:
586:
587:
588:
589:
590:
591:
592:
593:
594:
595:
596:
597:
598:
599:
600:
601:
602:
603:
604:
605:
606:
607:
608:
609:
610:
611:
612:
613:
614:
615:
616:
617:
618:
619:
620:
621:
622:
623:
624:
625:
626:
627:
628:
629:
630:
631:
632:
633:
634:
635:
636:
637:
638:
639:
640:
641:
642:
643:
644:
645:
646:
647:
648:
649:
650:
651:
652:
653:
654:
655:
656:
657:
658:
659:
660:
661:
662:
663:
664:
665:
666:
667:
668:
669:
670:
671:
672:
673:
674:
675:
676:
677:
678:
679:
680:
681:
682:
683:
684:
685:
686:
687:
688:
689:
690:
691:
692:
693:
694:
695:
696:
697:
698:
699:
700:
701:
702:
703:
704:
705:
706:
707:
708:
709:
710:
711:
712:
713:
714:
715:
716:
717:
718:
719:
720:
721:
722:
723:
724:
725:
726:
727:
728:
729:
730:
731:
732:
733:
734:
735:
736:
737:
738:
739:
740:
741:
742:
743:
744:
745:
746:
747:
748:
749:
750:
751:
752:
753:
754:
755:
756:
757:
758:
759:
760:
761:
762:
763:
764:
765:
766:
767:
768:
769:
770:
771:
772:
773:
774:
775:
776:
777:
778:
779:
780:
781:
782:
783:
784:
785:
786:
787:
788:
789:
790:
791:
792:
793:
794:
795:
796:
797:
798:
799:
800:
801:
802:
803:
804:
805:
806:
807:
808:
809:
810:
811:
812:
813:
814:
815:
816:
817:
818:
819:
820:
821:
822:
823:
824:
825:
826:
827:
828:
829:
830:
831:
832:
833:
834:
835:
836:
837:
838:
839:
840:
841:
842:
843:
844:
845:
846:
847:
848:
849:
850:
851:
852:
853:
854:
855:
856:
857:
858:
859:
860:
861:
862:
863:
864:
865:
866:
867:
868:
869:
870:
871:
872:
873:
874:
875:
876:
877:
878:
879:
880:
881:
882:
883:
884:
885:
886:
887:
888:
889:
890:
891:
892:
893:
894:
895:
896:
897:
898:
899:
900:
901:
902:
903:
904:
905:
906:
907:
908:
909:
910:
911:
912:
913:
914:
915:
916:
917:
918:
919:
920:
921:
922:
923:
924:
925:
926:
927:
928:
929:
930:
931:
932:
933:
934:
935:
936:
937:
938:
939:
940:
941:
942:
943:
944:
945:
946:
947:
948:
949:
950:
951:
952:
953:
954:
955:
956:
957:
958:
959:
960:
961:
962:
963:
964:
965:
966:
967:
968:
969:
970:
971:
972:
973:
974:
975:
976:
977:
978:
979:
980:
981:
982:
983:
984:
985:
986:
987:
988:
989:
990:
991:
992:
993:
994:
995:
996:
997:
998:
999:
1000:
1001:
1002:
1003:
1004:
1005:
1006:
1007:
1008:
1009:
1010:
1011:
1012:
1013:
1014:
1015:
1016:
1017:
1018:
1019:
1020:
1021:
1022:
1023:
1024:
1025:
1026:
1027:
1028:
1029:
1030:
1031:
1032:
1033:
1034:
1035:
1036:
1037:
1038:
1039:
1040:
1041:
1042:
1043:
1044:
1045:
1046:
1047:
1048:
1049:
1050:
1051:
1052:
1053:
1054:
1055:
1056:
1057:
1058:
1059:
1060:
1061:
1062:
1063:
1064:
1065:
1066:
1067:
1068:
1069:
1070:
1071:
1072:
1073:
1074:
1075:
1076:
1077:
1078:
1079:
1080:
1081:
1082:
1083:
1084:
1085:
1086:
1087:
1088:
1089:
1090:
1091:
1092:
1093:
1094:
1095:
1096:
1097:
1098:
1099:
1100:
1101:
1102:
1103:
1104:
1105:
1106:
1107:
1108:
1109:
1110:
1111:
1112:
1113:
1114:
1115:
1116:
1117:
1118:
1119:
1120:
1121:
1122:
1123:
1124:
1125:
1126:
1127:
1128:
1129:
1130:
1131:
1132:
1133:
1134:
1135:
1136:
1137:
1138:
1139:
1140:
1141:
1142:
1143:
1144:
1145:
1146:
1147:
1148:
1149:
1150:
1151:
1152:
1153:
1154:
1155:
1156:
1157:
1158:
1159:
1160:
1161:
1162:
1163:
1164:
1165:
1166:
1167:
1168:
1169:
1170:
1171:
1172:
1173:
1174:
1175:
1176:
1177:
1178:
1179:
1180:
1181:
1182:
1183:
1184:
1185:
1186:
1187:
1188:
1189:
1190:
1191:
1192:
1193:
1194:
1195:
1196:
1197:
1198:
1199:
1200:
1201:
1202:
1203:
1204:
1205:
1206:
1207:
1208:
1209:
1210:
1211:
1212:
1213:
1214:
1215:
1216:
1217:
1218:
1219:
1220:
1221:
1222:
1223:
1224:
1225:
1226:
1227:
1228:
1229:
1230:
1231:
1232:
1233:
1234:
1235:
1236:
1237:
1238:
1239:
1240:
1241:
1242:
1243:
1244:
1245:
1246:
1247:
1248:
1249:
1250:
1251:
1252:
1253:
1254:
1255:
1256:
1257:
1258:
1259:
1260:
1261:
1262:
1263:
1264:
1265:
1266:
1267:
1268:
1269:
1270:
1271:
1272:
1273:
1274:
1275:
1276:
1277:
1278:
1279:
1280:
1281:
1282:
1283:
1284:
1285:
1286:
1287:
1288:
1289:
1290:
1291:
1292:
1293:
1294:
1295:
1296:
1297:
1298:
1299:
1300:
1301:
1302:
1303:
1304:
1305:
1306:
1307:
1308:
1309:
1310:
1311:
1312:
1313:
1314:
1315:
1316:
1317:
1318:
1319:
1320:
1321:
1322:
1323:
1324:
1325:
1326:
1327:
1328:
1329:
1330:
1331:
1332:
1333:
1334:
1335:
1336:
1337:
1338:
1339:
1340:
1341:
1342:
1343:
1344:
1345:
1346:
1347:
1348:
1349:
1350:
1351:
1352:
1353:
1354:
1355:
1356:
1357:
1358:
1359:
1360:
1361:
1362:
1363:
1364:
1365:
1366:
1367:
1368:
1369:
1370:
1371:
1372:
1373:
1374:
1375:
1376:
1377:
1378:
1379:
1380:
1381:
1382:
1383:
1384:
1385:
1386:
1387:
1388:
1389:
1390:
1391:
1392:
1393:
1394:
1395:
1396:
1397:
1398:
1399:
1400:
1401:
1402:
1403:
1404:
1405:
1406:
1407:
1408:
1409:
1410:
1411:
1412:
1413:
1414:
1415:
1416:
1417:
1418:
1419:
1420:
1421:
1422:
1423:
1424:
1425:
1426:
1427:
1428:
1429:
1430:
1431:
1432:
1433:
1434:
1435:
1436:
1437:
1438:
1439:
1440:
1441:
1442:
1443:
1444:
1445:
1446:
1447:
1448:
1449:
1450:
1451:
1452:
1453:
1454:
1455:
1456:
1457:
1458:
1459:
1460:
1461:
1462:
1463:
1464:
1465:
1466:
1467:
1468:
1469:
1470:
1471:
1472:
1473:
1474:
1475:
1476:
1477:
1478:
1479:
1480:
1481:
1482:
1483:
1484:
1485:
1486:
1487:
1488:
1489:
1490:
1491:
1492:
1493:
1494:
1495:
1496:
1497:
1498:
1499:
1500:
1501:
1502:
1503:
1504:
1505:
1506:
1507:
1508:
1509:
1510:
1511:
1512:
1513:
1514:
1515:
1516:
1517:
1518:
1519:
1520:
1521:
1522:
1523:
1524:
1525:
1526:
1527:
1528:
1529:
1530:
1531:
1532:
1533:
1534:
1535:
1536:
1537:
1538:
1539:
1540:
1541:
1542:
1543:
1544:
1545:
1546:
1547:
1548:
1549:
1550:
1551:
1552:
1553:
1554:
1555:
1556:
1557:
1558:
1559:
1560:
1561:
1562:
1563:
1564:
1565:
1566:
1567:
1568:
1569:
1570:
1571:
1572:
1573:
1574:
1575:
1576:
1577:
1578:
1579:
1580:
1581:
1582:
1583:
1584:
1585:
1586:
1587:
1588:
1589:
1590:
1591:
1592:
1593:
1594:
1595:
1596:
1597:
1598:
1599:
1600:
1601:
1602:
1603:
1604:
1605:
1606:
1607:
1608:
1609:
1610:
1611:
1612:
1613:
1614:
1615:
1616:
1617:
1618:
1619:
1620:
1621:
1622:
1623:
1624:
1625:
1626:
1627:
1628:
1629:
1630:
1631:
1632:
1633:
1634:
1635:
1636:
1637:
1638:
1639:
1640:
1641:
1642:
1643:
1644:
1645:
1646:
1647:
1648:
1649:
1650:
1651:
1652:
1653:
1654:
1655:
1656:
1657:
1658:
1659:
1660:
1661:
1662:
1663:
1664:
1665:
1666:
1667:
1668:
1669:
1670:
1671:
1672:
1673:
1674:
1675:
1676:
1677:
1678:
1679:
1680:
1681:
1682:
1683:
1684:
1685:
1686:
1687:
1688:
1689:
1690:
1691:
1692:
1693:
1694:
1695:
1696:
1697:
1698:
1699:
1700:
1701:
1702:
1703:
1704:
1705:
1706:
1707:
1708:
1709:
1710:
1711:
1712:
1713:
1714:
1715:
1716:
1717:
1718:
1719:
1720:
1721:
1722:
1723:
1724:
1725:
1726:
1727:
1728:
1729:
1730:
1731:
1732:
1733:
1734:
1735:
1736:
1737:
1738:
1739:
1740:
1741:
1742:
1743:
1744:
1745:
1746:
1747:
1748:
1749:
1750:
1751:
1752:
1753:
1754:
1755:
1756:
1757:
1758:
1759:
1760:
1761:
1762:
1763:
1764:
1765:
1766:
1767:
1768:
1769:
1770:
1771:
1772:
1773:
1774:
1775:
1776:
1777:
1778:
1779:
1780:
1781:
1782:
1783:
1784:
1785:
1786:
1787:
1788:
1789:
1790:
1791:
1792:
1793:
1794:
1795:
1796:
1797:
1798:
1799:
1800:
1801:
1802:
1803:
1804:
1805:
1806:
1807:
1808:
1809:
1810:
1811:
1812:
1813:
1814:
1815:
1816:
1817:
1818:
1819:
1820:
1821:
1822:
1823:
1824:
1825:
1826:
1827:
1828:
1829:
1830:
1831:
1832:
1833:
1834:
1835:
1836:
1837:
1838:
1839:
1840:
1841:
1842:
1843:
1844:
1845:
1846:
1847:
1848:
1849:
1850:
1851:
1852:
1853:
1854:
1855:
1856:
1857:
1858:
1859:
1860:
1861:
1862:
1863:
1864:
1865:
1866:
1867:
1868:
1869:
1870:
1871:
1872:
1873:
1874:
1875:
1876:
1877:
1878:
1879:
1880:
1881:
1882:
1883:
1884:
1885:
1886:
1887:
1888:
1889:
1890:
1891:
1892:
1893:
1894:
1895:
1896:
1897:
1898:
1899:
1900:
1901:
1902:
1903:
1904:
1905:
1906:
1907:
1908:
1909:
1910:
1911:
1912:
1913:
1914:
1915:
1916:
1917:
1918:
1919:
1920:
1921:
1922:
1923:
1924:
1925:
1926:
1927:
1928:
1929:
1930:
1931:
1932:
1933:
1934:
1935:
1936:
1937:
1938:
1939:
1940:
1941:
1942:
1943:
1944:
1945:
1946:
1947:
1948:
1949:
1950:
1951:
1952:
1953:
1954:
1955:
1956:
1957:
1958:
1959:
1960:
1961:
1962:
1963:
1964:
1965:
1966:
1967:
1968:
1969:
1970:
1971:
1972:
1973:
1974:
1975:
1976:
1977:
1978:
1979:
1980:
1981:
1982:
1983:
1984:
1985:
1986:
1987:
1988:
1989:
1990:
1991:
1992:
1993:
1994:
1995:
1996:
1997:
1998:
1999:
2000:
2001:
2002:
2003:
2004:
2005:
2006:
2007:
2008:
2009:
2010:
2011:
2012:
2013:
2014:
2015:
2016:
2017:
2018:
2019:
2020:
2021:
2022:
2023:
2024:
2025:
2026:
2027:
2028:
2029:
2030:
2031:
2032:
2033:
2034:
2035:
2036:
2037:
2038:
2039:
2040:
2041:
2042:
2043:
2044:
2045:
2046:
2047:
2048:
2049:
2050:
2051:
2052:
2053:
2054:
2055:
2056:
2057:
2058:
2059:
2060:
2061:
2062:
2063:
2064:
2065:
2066:
2067:
2068:
2069:
2070:
2071:
2072:
2073:
2074:
2075:
2076:
2077:
2078:
2079:
2080:
2081:
2082:
2083:
2084:
2085:
2086:
2087:
2088:
2089:
2090:
2091:
2092:
2093:
2094:
2095:
2096:
2097:
2098:
2099:
2100:
2101:
2102:
2103:
2104:
2105:
2106:
2107:
2108:
2109:
2110:
2111:
2112:
2113:
2114:
2115:
2116:
2117:
2118:
2119:
2120:
2121:
2122:
2123:
2124:
2125:
2126:
2127:
2128:
2129:
2130:
2131:
2132:
2133:
2134:
2135:
2136:
2137:
2138:
2139:
2140:
2141:
2142:
2143:
2144:
2145:
2146:
2147:
2148:
2149:
2150:
2151:
2152:
2153:
2154:
2155:
2156:
2157:
2158:
2159:
2160:
2161:
2162:
2163:
2164:
2165:
2166:
2167:
2168:
2169:
2170:
2171:
2172:
2173:
2174:
2175:
2176:
2177:
2178:
2179:
2180:
2181:
2182:
2183:
2184:
2185:
2186:
2187:
2188:
2189:
2190:
2191:
2192:
2193:
2194:
2195:
2196:
2197:
2198:
2199:
2200:
2201:
2202:
2203:
2204:
2205:
2206:
2207:
2208:
2209:
2210:
2211:
2212:
2213:
2214:
2215:
2216:
2217:
2218:
2219:
2220:
2221:
2222:
2223:
2224:
2225:
2226:
2227:
2228:
2229:
2230:
2231:
2232:
2233:
2234:
2235:
2236:
2237:
2238:
2239:
2240:
2241:
2242:
2243:
2244:
2245:
2246:
2247:
2248:
2249:
2250:
2251:
2252:
2253:
2254:
2255:
2256:
2257:
2258:
2259:
2260:
2261:
2262:
2263:
2264:
2265:
2266:
2267:
2268:
2269:
2270:
2271:
2272:
2273:
2274:
2275:
2276:
2277:
2278:
2279:
2280:
2281:
2282:
2283:
2284:
2285:
2286:
2287:
2288:
2289:
2290:
2291:
2292:
2293:
2294:
2295:
2296:
2297:
2298:
2299:
2300:
2301:
2302:
2303:
2304:
2305:
2306:
2307:
2308:
2309:
2310:
2311:
2312:
2313:
2314:
2315:
2316:
2317:
2318:
2319:
2320:
2321:
2322:
2323:
2324:
2325:
2326:
2327:
2328:
2329:
2330:
2331:
2332:
2333:
2334:
2335:
2336:
2337:
2338:
2339:
2340:
2341:
2342:
2343:
2344:
2345:
2346:
2347:
2348:
2349:
2350:
2351:
2352:
2353:
2354:
2355:
2356:
2357:
2358:
2359:
2360:
2361:
2362:
2363:
2364:
2365:
2366:
2367:
2368:
2369:
2370:
2371:
2372:
2373:
2374:
2375:
2376:
2377:
2378:
2379:
2380:
2381:
2382:
2383:
2384:
2385:
2386:
2387:
2388:
2389:
2390:
2391:
2392:
2393:
2394:
2395:
2396:
2397:
2398:
2399:
2400:
2401:
2402:
2403:
2404:
2405:
2406:
2407:
2408:
2409:
2410:
2411:
2412:
2413:
2414:
2415:
2416:
2417:
2418:
2419:
2420:
2421:
2422:
2423:
2424:
2425:
2426:
2427:
2428:
2429:
2430:
2431:
2432:
2433:
2434:
2435:
2436:
2437:
2438:
2439:
2440:
2441:
2442:
2443:
2444:
2445:
2446:
2447:
2448:
2449:
2450:
2451:
2452:
2453:
2454:
2455:
2456:
2457:
2458:
2459:
2460:
2461:
2462:
2463:
2464:
2465:
2466:
2467:
2468:
2469:
2470:
2471:
2472:
2473:
2474:
2475:
2476:
2477:
2478:
2479:
2480:
2481:
2482:
2483:
2484:
2485:
2486:
2487:
2488:
2489:
2490:
2491:
2492:
2493:
2494:
2495:
2496:
2497:
2498:
2499:
2500:
2501:
2502:
2503:
2504:
2505:
2506:
2507:
2508:
2509:
2510:
2511:
2512:
2513:
2514:
2515:
2516:
2517:
2518:
2519:
2520:
2521:
2522:
2523:
2524:
2525:
2526:
2527:
2528:
2529:
2530:
2531:
2532:
2533:
2534:
2535:
2536:
2537:
2538:
2539:
2540:
2541:
2542:
2543:
2544:
2545:
2546:
2547:
2548:
2549:
2550:
2551:
2552:
2553:
2554:
2555:
2556:
2557:
2558:
2559:
2560:
2561:
2562:
2563:
2564:
2565:
2566:
2567:
2568:
2569:
2570:
2571:
2572:
2573:
2574:
2575:
2576:
2577:
2578:
2579:
2580:
2581:
2582:
2583:
2584:
2585:
2586:
2587:
2588:
2589:
2590:
2591:
2592:
2593:
2594:
2595:
2596:
2597:
2598:
2599:
2600:
2601:
2602:
2603:
2604:
2605:
2606:
2607:
2608:
2609:
2610:
2611:
2612:
2613:
2614:
2615:
2616:
2617:
2618:
2619:
2620:
2621:
2622:
2623:
2624:
2625:
2626:
2627:
2628:
2629:
2630:
2631:
2632:
2633:
2634:
2635:
2636:
2637:
2638:
2639:
2640:
2641:
2642:
2643:
2644:
2645:
2646:
2647:
2648:
2649:
2650:
2651:
2652:
2653:
2654:
2655:
2656:
2657:
2658:
2659:
2660:
2661:
2662:
2663:
2664:
2665:
2666:
2667:
2668:
2669:
2670:
2671:
2672:
2673:
2674:
2675:
2676:
2677:
2678:
2679:
2680:
2681:
2682:
2683:
2684:
2685:
2686:
2687:
2688:
2689:
2690:
2691:
2692:
2693:
2694:
2695:
2696:
2697:
2698:
2699:
2700:
2701:
2702:
2703:
2704:
2705:
2706:
2707:
2708:
2709:
2710:
2711:
2712:
2713:
2714:
2715:
2716:
2717:
2718:
2719:
2720:
2721:
2722:
2723:
2724:
2725:
2726:
2727:
2728:
2729:
2730:
2731:
2732:
2733:
2734:
2735:
2736:
2737:
2738:
2739:
2740:
2741:
2742:
2743:
2744:
2745:
2746:
2747:
2748:
2749:
2750:
2751:
2752:
2753:
2754:
2755:
2756:
2757:
2758:
2759:
2760:
2761:
2762:
2763:
2764:
2765:
2766:
2767:
2768:
2769:
2770:
2771:
2772:
2773:
2774:
2775:
2776:
2777:
2778:
2779:
2780:
2781:
2782:
2783:
2784:
2785:
2786:
2787:
2788:
2789:
2790:
2791:
2792:
2793:
2794:
2795:
2796:
2797:
2798:
2799:
2800:
2801:
2802:
2803:
2804:
2805:
2806:
2807:
2808:
2809:
2810:
2811:
2812:
2813:
2814:
2815:
2816:
2817:
2818:
2819:
2820:
2821:
2822:
2823:
2824:
2825:
2826:
2827:
2828:
2829:
2830:
2831:
2832:
2833:
2834:
2835:
2836:
2837:
2838:
2839:
2840:
2841:
2842:
2843:
2844:
2845:
2846:
2847:
2848:
2849:
2850:
2851:
2852:
2853:
2854:
2855:
2856:
2857:
2858:
2859:
2860:
2861:
2862:
2863:
2864:
2865:
2866:
2867:
2868:
2869:
2870:
2871:
2872:
2873:
2874:
2875:
2876:
2877:
2878:
2879:
2880:
2881:
2882:
2883:
2884:
2885:
2886:
2887:
2888:
2889:
2890:
2891:
2892:
2893:
2894:
2895:
2896:
2897:
2898:
2899:
2900:
2901:
2902:
2903:
2904:
2905:
2906:
2907:
2908:
2909:
2910:
2911:
2912:
2913:
2914:
2915:
2916:
2917:
2918:
2919:
2920:
2921:
2922:
2923:
2924:
2925:
2926:
2927:
2928:
2929:
2930:
2931:
2932:
2933:
2934:
2935:
2936:
2937:
2938:
2939:
2940:
2941:
2942:
2943:
2944:
2945:
2946:
2947:
2948:
2949:
2950:
2951:
2952:
2953:
2954:
2955:
2956:
2957:
2958:
2959:
2960:
2961:
2962:
2963:
2964:
2965:
2966:
2967:
2968:
2969:
2970:
2971:
2972:
2973:
2974:
2975:
2976:
2977:
2978:
2979:
2980:
2981:
2982:
2983:
2984:
2985:
2986:
2987:
2988:
2989:
2990:
2991:
2992:
2993:
2994:
2995:
2996:
2997:
2998:
2999:
3000:
3001:
3002:
3003:
3004:
3005:
3006:
3007:
3008:
3009:
3010:
3011:
3012:
3013:
3014:
3015:
3016:
3017:
3018:
3019:
3020:
3021:
3022:
3023:
3024:
3025:
3026:
3027:
3028:
3029:
3030:
3031:
3032:
3033:
3034:
3035:
3036:
3037:
3038:
3039:
3040:
3041:
3042:
3043:
3044:
3045:
3046:
3047:
3048:
3049:
3050:
3051:
3052:
3053:
3054:
3055:
3056:
3057:
3058:
3059:
3060:
3061:
3062:
3063:
3064:
3065:
3066:
3067:
3068:
3069:
3070:
3071:
3072:
3073:
3074:
3075:
3076:
3077:
3078:
3079:
3080:
3081:
3082:
3083:
3084:
3085:
3086:
3087:
3088:
3089:
3090:
3091:
3092:
3093:
3094:
3095:
3096:
3097:
3098:
3099:
3100:
3101:
3102:
3103:
3104:
3105:
3106:
3107:
3108:
3109:
3110:
3111:
3112:
3113:
3114:
3115:
3116:
3117:
3118:
3119:
3120:
3121:
3122:
3123:
3124:
3125:
3126:
3127:
3128:
3129:
3130:
3131:
3132:
3133:
3134:
3135:
3136:
3137:
3138:
3139:
3140:
3141:
3142:
3143:
3144:
3145:
3146:
3147:
3148:
3149:
3150:
3151:
3152:
3153:
3154:
3155:
3156:
3157:
3158:
3159:
3160:
3161:
3162:
3163:
3164:
3165:
3166:
3167:
3168:
3169:
3170:
3171:
3172:
3173:
3174:
3175:
3176:
3177:
3178:
3179:
3180:
3181:
3182:
3183:
3184:
3185:
3186:
3187:
3188:
3189:
3190:
3191:
3192:
3193:
3194:
3195:
3196:
3197:
3198:
3199:
3200:
3201:
3202:
3203:
3204:
3205:
3206:
3207:
3208:
3209:
3210:
3211:
3212:
3213:
3214:
3215:
3216:
3217:
3218:
3219:
3220:
3221:
3222:
3223:
3224:
3225:
3226:
3227:
3228:
3229:
3230:
3231:
3232:
3233:
3234:
3235:
3236:
3237:
3238:
3239:
3240:
3241:
3242:
3243:
3244:
3245:
3246:
3247:
3248:
3249:
3250:
3251:
3252:
3253:
3254:
3255:
3256:
3257:
3258:
3259:
3260:
3261:
3262:
3263:
3264:
3265:
3266:
3267:
3268:
3269:
3270:
3271:
3272:
3273:
3274:
3275:
3276:
3277:
3278:
3279:
3280:
3281:
3282:
3283:
3284:
3285:
3286:
3287:
3288:
3289:
3290:
3291:
3292:
3293:
3294:
3295:
3296:
3297:
3298:
3299:
3300:
3301:
3302:
3303:
3304:
3305:
3306:
3307:
3308:
3309:
3310:
3311:
3312:
3313:
#!/usr/bin/perl -w
#
# NMS FormMail Version 3.14c1
#
 
use strict;
use vars qw(
  $DEBUGGING $emulate_matts_code $secure %more_config
  $allow_empty_ref $max_recipients $mailprog @referers
  @allow_mail_to @recipients %recipient_alias
  @valid_ENV $date_fmt $style $send_confirmation_mail
  $confirmation_text $locale $charset $no_content
  $double_spacing $wrap_text $wrap_style $postmaster 
  $address_style
);
 
# PROGRAM INFORMATION
# -------------------
# FormMail.pl Version 3.14c1
#
# This program is licensed in the same way as Perl
# itself. You are free to choose between the GNU Public
# License   or
# the Artistic License
# 
#
# For help on configuration or installation see the
# README file or the POD documentation at the end of
# this file.
 
# USER CONFIGURATION SECTION
# --------------------------
# Modify these to your own settings. You might have to
# contact your system administrator if you do not run
# your own web server. If the purpose of these
# parameters seems unclear, please see the README file.
#
BEGIN
{
  # Load allowed email addresses from file
  open F, '< ../.ht_mailform.txt'
            or die "Can't open .ht_mailform.txt: $!";
  while() {
    s/\s+//g;
    push @allow_mail_to, $_ if $_       # Skip blank lines
  }
  close F;
 
  $DEBUGGING         = 1;
  $emulate_matts_code= 0;
  $secure            = 1;
  $allow_empty_ref   = 1;
  $max_recipients    = 5;
  $mailprog          = '/usr/sbin/sendmail -oi -t';
  $postmaster        = '';
  @referers          = qw();    # Allow all by default
  @recipients        = ();
  %recipient_alias   = ();
  @valid_ENV         = qw(REMOTE_HOST REMOTE_ADDR REMOTE_USER HTTP_USER_AGENT);
  $locale            = '';
  $charset           = 'iso-8859-1';
  $date_fmt          = '%A, %B %d, %Y at %H:%M:%S';
  $style             = '/css/nms.css';
  $no_content        = 0;
  $double_spacing    = 1;
  $wrap_text         = 0;
  $wrap_style        = 1;
  $address_style     = 0;
  $send_confirmation_mail = 0;
  $confirmation_text = <<'END_OF_CONFIRMATION';
From: [email protected]
Subject: form submission
 
Thank you for your form submission.
 
END_OF_CONFIRMATION
 
# You may need to uncomment the line below and adjust the path.
# use lib './lib';
 
# USER CUSTOMISATION SECTION
# --------------------------
# Place any custom code here
 
 
 
# USER CUSTOMISATION << END >>
# ----------------------------
# (no user serviceable parts beyond here)
}
 
#
# The code below consists of module source inlined into this
# script to make it a standalone CGI.
#
# Inlining performed by NMS inline - see /v2/buildtools/inline
# in CVS at http://sourceforge.net/projects/nms-cgi for details.
#
BEGIN {
 
 
$CGI::NMS::INLINED_SOURCE::CGI_NMS_Mailer = <<'END_INLINED_CGI_NMS_Mailer';
package CGI::NMS::Mailer;
use strict;
 
use POSIX qw(strftime);
 
=head1 NAME
 
CGI::NMS::Mailer - email sender base class
 
=head1 SYNOPSYS
 
  use base qw(CGI::NMS::Mailer);
 
  ...
 
=head1 DESCRIPTION
 
This is a base class for classes implementing low-level email
sending objects for use within CGI scripts.
 
=head1 METHODS
 
=over
 
=item output_trace_headers ( TRACEINFO )
 
Uses the print() virtual method to output email abuse tracing headers
including whatever useful information can be gleaned from the CGI
environment variables.
 
The TRACEINFO parameter should be a short string giving the name and
version of the CGI script.
 
=cut
 
sub output_trace_headers {
  my ($self, $traceinfo) = @_;
 
  $ENV{REMOTE_ADDR} =~ /^\[?([\d\.\:a-f]{7,100})\]?$/i or die
     "failed to get remote address from [$ENV{REMOTE_ADDR}], so can't send traceable email";
  $self->print("Received: from [$1]\n");
 
  my $me = ($ENV{SERVER_NAME} =~ /^([\w\-\.]{1,100})$/ ? $1 : 'unknown');
  $self->print("\tby $me ($traceinfo)\n");
 
  my $date = strftime '%a, %e %b %Y %H:%M:%S GMT', gmtime;
  $self->print("\twith HTTP; $date\n");
 
  if ($ENV{SCRIPT_NAME} =~ /^([\w\-\.\/]{1,100})$/) {
    $self->print("\t(script-name $1)\n");
  }
 
  if (defined $ENV{HTTP_HOST} and $ENV{HTTP_HOST} =~ /^([\w\-\.]{1,100})$/) {
    $self->print("\t(http-host $1)\n");
  }
 
  my $ff = $ENV{HTTP_X_FORWARDED_FOR};
  if (defined $ff) {
    $ff =~ /^\s*([\w\-\.\[\] ,]{1,200})\s*/ or die
      "malformed X-Forwarded-For [$ff], suspect attack, aborting";
 
    $self->print("\t(http-x-forwarded-for $1)\n");
  }
 
  my $ref = $ENV{HTTP_REFERER};
  if (defined $ref and $ref =~ /^([\w\-\.\/\:\;\%\@\#\~\=\+\?]{1,100})$/) {
    $self->print("\t(http-referer $1)\n");
  }
}
 
=back
 
=head1 VIRTUAL METHODS
 
Subclasses must implement the following methods:
 
=over
 
=item newmail ( TRACEINFO, SENDER, @RECIPIENTS )
 
Starts a new email.  TRACEINFO is the script name and version, SENDER is
the email address to use as the envelope sender and @RECIPIENTS is a list
of recipients.  Dies on error.
 
=item print ( @ARGS )
 
Concatenates the arguments and appends them to the email.  Both the
header and the body should be sent in this way, separated by a single
blank line.  Dies on error.
 
=item endmail ()
 
Finishes the email, flushing buffers and sending it.  Dies on error.
 
=back
 
=head1 SEE ALSO
 
L, L,
L
 
=head1 MAINTAINERS
 
The NMS project, Ehttp://nms-cgi.sourceforge.net/E
 
To request support or report bugs, please email
E[email protected]
 
=head1 COPYRIGHT
 
Copyright 2003 London Perl Mongers, All rights reserved
 
=head1 LICENSE
 
This module is free software; you are free to redistribute it
and/or modify it under the same terms as Perl itself.
 
=cut
 
1;
 
 
END_INLINED_CGI_NMS_Mailer
 
 
$CGI::NMS::INLINED_SOURCE::CGI_NMS_Mailer_SMTP = <<'END_INLINED_CGI_NMS_Mailer_SMTP';
package CGI::NMS::Mailer::SMTP;
use strict;
 
use IO::Socket;
BEGIN { 
do {
  unless (eval {local $SIG{__DIE__} ; require CGI::NMS::Mailer}) {
    eval $CGI::NMS::INLINED_SOURCE::CGI_NMS_Mailer or die $@;
    $INC{'CGI/NMS/Mailer.pm'} = 1;
  }
  undef $CGI::NMS::INLINED_SOURCE::CGI_NMS_Mailer; # to save memory
};
 
 import CGI::NMS::Mailer }
use base qw(CGI::NMS::Mailer);
 
=head1 NAME
 
CGI::NMS::Mailer::SMTP - mail sender using SMTP
 
=head1 SYNOPSYS
 
  my $mailer = CGI::NMS::Mailer::SMTP->new('mailhost.bigisp.net');
 
  $mailer->newmail($from, $to);
  $mailer->print($email_header_and_body);
  $mailer->endmail;
 
=head1 DESCRIPTION
 
This implementation of the mailer object defined in L
uses an SMTP connection to a mail relay to send the email.
 
=head1 CONSTRUCTORS
 
=over
 
=item new ( MAILHOST )
 
MAILHOST must be the name or dotted decimal IP address of an SMTP
server that will relay mail for the web server.
 
=cut
 
sub new {
  my ($pkg, $mailhost) = @_;
 
  $mailhost .= ':25' unless $mailhost =~ /:/;
  return bless { Mailhost => $mailhost }, $pkg;
}
 
=back
 
=head1 METHODS
 
See L for the user interface to these methods.
 
=over
 
=item newmail ( SCRIPTNAME, SENDER, @RECIPIENTS )
 
Opens the SMTP connection and sends trace headers.
 
=cut
 
sub newmail {
  my ($self, $scriptname, $sender, @recipients) = @_;
 
  $self->{Sock} = IO::Socket::INET->new($self->{Mailhost});
  defined $self->{Sock} or die "connect to [$self->{Mailhost}]: $!";
 
  my $banner = $self->_smtp_response;
  $banner =~ /^2/ or die "bad SMTP banner [$banner] from [$self->{Mailhost}]";
 
  my $helohost = ($ENV{SERVER_NAME} =~ /^([\w\-\.]+)$/ ? $1 : '.');
  $self->_smtp_command("HELO $helohost");
  $self->_smtp_command("MAIL FROM:<$sender>");
  foreach my $r (@recipients) {
    $self->_smtp_command("RCPT TO:<$r>");
  }
  $self->_smtp_command("DATA", '3');
 
  $self->output_trace_headers($scriptname);
}
 
=item print ( @ARGS )
 
Writes some email body to the SMTP socket.
 
=cut
 
sub print {
  my ($self, @args) = @_;
 
  my $text = join '', @args;
  $text =~ s#\n#\015\012#g;
  $text =~ s#^\.#..#mg;
 
  $self->{Sock}->print($text) or die "write to SMTP socket: $!";
}
 
=item endmail ()
 
Finishes sending the mail and closes the SMTP connection.
 
=cut
 
sub endmail {
  my ($self) = @_;
 
  $self->_smtp_command(".");
  $self->_smtp_command("QUIT");
  delete $self->{Sock};
}
 
=back
 
=head1 PRIVATE METHODS
 
These methods should be called from within this module only.
 
=over
 
=item _smtp_getline ()
 
Reads a line from the SMTP socket, and returns it as a string,
including the terminating newline sequence.
 
=cut
 
sub _smtp_getline {
  my ($self) = @_;
 
  my $sock = $self->{Sock};
  my $line = <$sock>;
  defined $line or die "read from SMTP server: $!";
 
  return $line;
}
 
=item _smtp_response ()
 
Reads a command response from the SMTP socket, and returns it as
a single string.  A multiline responses is returned as a multiline
string, and the terminating newline sequence is always included.
 
=cut
 
sub _smtp_response {
  my ($self) = @_;
 
  my $line = $self->_smtp_getline;
  my $resp = $line;
  while ($line =~ /^\d\d\d\-/) {
    $line = $self->_smtp_getline;
    $resp .= $line;
  }
  return $resp;
}
 
=item _smtp_command ( COMMAND [,EXPECT] )
 
Sends the SMTP command COMMAND to the SMTP server, and reads a line
in response.  Dies unless the first character of the response is
the character EXPECT, which defaults to '2'.
 
=cut
 
sub _smtp_command {
  my ($self, $command, $expect) = @_;
  defined $expect or $expect = '2';
 
  $self->{Sock}->print("$command\015\012") or die
    "write [$command] to SMTP server: $!";
  
  my $resp = $self->_smtp_response;
  unless (substr($resp, 0, 1) eq $expect) {
    die "SMTP command [$command] gave response [$resp]";
  }
}
 
=back
 
=head1 MAINTAINERS
 
The NMS project, Ehttp://nms-cgi.sourceforge.net/E
 
To request support or report bugs, please email
E[email protected]
 
=head1 COPYRIGHT
 
Copyright 2003 London Perl Mongers, All rights reserved
 
=head1 LICENSE
 
This module is free software; you are free to redistribute it
and/or modify it under the same terms as Perl itself.
 
=cut
 
1;
  
 
END_INLINED_CGI_NMS_Mailer_SMTP
 
 
$CGI::NMS::INLINED_SOURCE::CGI_NMS_Mailer_Sendmail = <<'END_INLINED_CGI_NMS_Mailer_Sendmail';
package CGI::NMS::Mailer::Sendmail;
use strict;
 
use IO::File;
BEGIN { 
do {
  unless (eval {local $SIG{__DIE__} ; require CGI::NMS::Mailer}) {
    eval $CGI::NMS::INLINED_SOURCE::CGI_NMS_Mailer or die $@;
    $INC{'CGI/NMS/Mailer.pm'} = 1;
  }
  undef $CGI::NMS::INLINED_SOURCE::CGI_NMS_Mailer; # to save memory
};
 
 import CGI::NMS::Mailer }
use base qw(CGI::NMS::Mailer);
 
=head1 NAME
 
CGI::NMS::Mailer::Sendmail - mail sender using sendmail
 
=head1 SYNOPSYS
 
  my $mailer = CGI::NMS::Mailer::Sendmail->new('/usr/lib/sendmail -oi -t');
 
  $mailer->newmail($from, $to);
  $mailer->print($email_header_and_body);
  $mailer->endmail;
 
=head1 DESCRIPTION
 
This implementation of the mailer object defined in L
uses a piped open to the UNIX sendmail program to send the email.
 
=head1 CONSTRUCTORS
 
=over
 
=item new ( MAILPROG )
 
MAILPROG must be the shell command to which a pipe is opened, including
all nessessary switches to cause the sendmail program to read the email
recipients from the header of the email.
 
=cut
 
sub new {
  my ($pkg, $mailprog) = @_;
 
  return bless { Mailprog => $mailprog }, $pkg;
}
 
=back
 
=head1 METHODS
 
See L for the user interface to these methods.
 
=over
 
=item newmail ( SCRIPTNAME, POSTMASTER, @RECIPIENTS )
 
Opens the sendmail pipe and outputs trace headers.
 
=cut
 
sub newmail {
  my ($self, $scriptname, $postmaster, @recipients) = @_;
 
  my $command = $self->{Mailprog};
  $command .= qq{ -f "$postmaster"} if $postmaster;
  my $pipe;
  eval { local $SIG{__DIE__};
         $pipe = IO::File->new("| $command");
       };
  if ($@) {
    die $@ unless $@ =~ /Insecure directory/;
    delete $ENV{PATH};
    $pipe = IO::File->new("| $command");
  }
 
  die "Can't open mailprog [$command]\n" unless $pipe;
  $self->{Pipe} = $pipe;
 
  $self->output_trace_headers($scriptname);
}
 
=item print ( @ARGS )
 
Writes some email body to the sendmail pipe.
 
=cut
 
sub print {
  my ($self, @args) = @_;
 
  $self->{Pipe}->print(@args) or die "write to sendmail pipe: $!";
}
 
=item endmail ()
 
Closes the sendmail pipe.
 
=cut
 
sub endmail {
  my ($self) = @_;
 
  $self->{Pipe}->close or die "close sendmail pipe failed, mailprog=[$self->{Mailprog}]";
  delete $self->{Pipe};
}
 
=back
 
=head1 MAINTAINERS
 
The NMS project, Ehttp://nms-cgi.sourceforge.net/E
 
To request support or report bugs, please email
E[email protected]
 
=head1 COPYRIGHT
 
Copyright 2003 London Perl Mongers, All rights reserved
 
=head1 LICENSE
 
This module is free software; you are free to redistribute it
and/or modify it under the same terms as Perl itself.
 
=cut
 
1;
  
 
END_INLINED_CGI_NMS_Mailer_Sendmail
 
 
unless (eval {local $SIG{__DIE__} ; require CGI::NMS::Charset}) {
  eval <<'END_INLINED_CGI_NMS_Charset' or die $@;
package CGI::NMS::Charset;
use strict;
 
require 5.00404;
 
use vars qw($VERSION);
$VERSION = sprintf '%d.%.2d', (q$Revision: 1.8 $ =~ /(\d+)\.(\d+)/);
 
=head1 NAME
 
CGI::NMS::Charset - a charset-aware object for handling text strings
 
=head1 SYNOPSIS
 
  my $cs = CGI::NMS::Charset->new('iso-8859-1');
 
  my $safe_to_put_in_html = $cs->escape($untrusted_user_input);
 
  my $printable = &{ $cs->strip_nonprint_coderef }( $input );
  my $escaped = &{ $cs->escape_html_coderef }( $printable );
 
=head1 DESCRIPTION
 
Each object of class C is bound to a particular
character set when it is created.  The object provides methods to
generate coderefs to perform a couple of character set dependent
operations on text strings.
 
=cut
 
=head1 CONSTRUCTORS
 
=over
 
=item new ( CHARSET )
 
Creates a new C object, suitable for handing text
in the character set CHARSET.  The CHARSET parameter must be a
character set string, such as C or C for example.
 
=cut
 
sub new
{
   my ($pkg, $charset) = @_;
 
   my $self = { CHARSET => $charset };
 
   if ($charset =~ /^utf-8$/i)
   {
      $self->{SN} = \&_strip_nonprint_utf8;
      $self->{EH} = \&_escape_html_utf8;
   }
   elsif ($charset =~ /^iso-8859/i)
   {
      $self->{SN} = \&_strip_nonprint_8859;
      if ($charset =~ /^iso-8859-1$/i)
      {
         $self->{EH} = \&_escape_html_8859_1;
      }
      else
      {
         $self->{EH} = \&_escape_html_8859;
      }
   }
   elsif ($charset =~ /^us-ascii$/i)
   {
      $self->{SN} = \&_strip_nonprint_ascii;
      $self->{EH} = \&_escape_html_8859_1;
   }
   else
   {
      $self->{SN} = \&_strip_nonprint_weak;
      $self->{EH} = \&_escape_html_weak;
   }
 
   return bless $self, $pkg;
}
 
=back
 
=head1 METHODS
 
=over
 
=item charset ()
 
Returns the CHARSET string that was passed to the constructor.
 
=cut
 
sub charset
{
   my ($self) = @_;
 
   return $self->{CHARSET};
}
 
=item escape ( STRING )
 
Returns a copy of STRING with runs of non-printable characters
replaced with spaces and HTML metacharacters replaced with the
equivalent entities.
 
If STRING is undef then the empty string will be returned.
 
=cut
 
sub escape
{
   my ($self, $string) = @_;
 
   return &{ $self->{EH} }(  &{ $self->{SN} }($string)  );
}
 
=item strip_nonprint_coderef ()
 
Returns a reference to a sub to replace runs of non-printable
characters with spaces, in a manner suited to the charset in
use.
 
The returned coderef points to a sub that takes a single readonly
string argument and returns a modified version of the string.  If
undef is passed to the function then the empty string will be
returned.
 
=cut
 
sub strip_nonprint_coderef
{
   my ($self) = @_;
 
   return $self->{SN};
}
 
=item escape_html_coderef ()
 
Returns a reference to a sub to escape HTML metacharacters in
a manner suited to the charset in use.
 
The returned coderef points to a sub that takes a single readonly
string argument and returns a modified version of the string.
 
=cut
 
sub escape_html_coderef
{
   my ($self) = @_;
 
   return $self->{EH};
}
 
=back
 
=head1 DATA TABLES
 
=over
 
=item C<%eschtml_map>
 
The C<%eschtml_map> hash maps C characters to the
equivalent HTML entities.
 
=cut
 
use vars qw(%eschtml_map);
%eschtml_map = ( 
                 ( map {chr($_) => "&#$_;"} (0..255) ),
                 '<' => '<',
                 '>' => '>',
                 '&' => '&',
                 '"' => '"',
               );
 
=back
 
=head1 PRIVATE FUNCTIONS
 
These functions are returned by the strip_nonprint_coderef() and
escape_html_coderef() methods and invoked by the escape() method.
The function most appropriate to the character set in use will be
chosen.
 
=over
 
=item _strip_nonprint_utf8
 
Returns a copy of STRING with everything but printable C
characters and valid C multibyte sequences replaced with
space characters.
 
=cut
 
sub _strip_nonprint_utf8
{
   my ($string) = @_;
   return '' unless defined $string;
 
   $string =~
   s%
    ( [\t\n\040-\176]               # printable us-ascii
    | [\xC2-\xDF][\x80-\xBF]        # U+00000080 to U+000007FF
    | \xE0[\xA0-\xBF][\x80-\xBF]    # U+00000800 to U+00000FFF
    | [\xE1-\xEF][\x80-\xBF]{2}     # U+00001000 to U+0000FFFF
    | \xF0[\x90-\xBF][\x80-\xBF]{2} # U+00010000 to U+0003FFFF
    | [\xF1-\xF7][\x80-\xBF]{3}     # U+00040000 to U+001FFFFF
    | \xF8[\x88-\xBF][\x80-\xBF]{3} # U+00200000 to U+00FFFFFF
    | [\xF9-\xFB][\x80-\xBF]{4}     # U+01000000 to U+03FFFFFF
    | \xFC[\x84-\xBF][\x80-\xBF]{4} # U+04000000 to U+3FFFFFFF
    | \xFD[\x80-\xBF]{5}            # U+40000000 to U+7FFFFFFF
    ) | .
   %
    defined $1 ? $1 : ' '
   %gexs;
 
   #
   # U+FFFE, U+FFFF and U+D800 to U+DFFF are dangerous and
   # should be treated as invalid combinations, according to
   # http://www.cl.cam.ac.uk/~mgk25/unicode.html
   #
   $string =~ s%\xEF\xBF[\xBE-\xBF]% %g;
   $string =~ s%\xED[\xA0-\xBF][\x80-\xBF]% %g;
 
   return $string;
}
 
=item _escape_html_utf8 ( STRING )
 
Returns a copy of STRING with any HTML metacharacters
escaped.  Escapes all but the most commonly occurring C
characters and bytes that might form part of valid C
multibyte sequences.
 
=cut
 
sub _escape_html_utf8
{
   my ($string) = @_;
 
   $string =~ s|([^\w \t\r\n\-\.\,\x80-\xFD])| $eschtml_map{$1} |ge;
   return $string;
}
 
=item _strip_nonprint_weak ( STRING )
 
Returns a copy of STRING with sequences of NULL characters
replaced with space characters.
 
=cut
 
sub _strip_nonprint_weak
{
   my ($string) = @_;
   return '' unless defined $string;
 
   $string =~ s/\0+/ /g;
   return $string;
}
   
=item _escape_html_weak ( STRING )
 
Returns a copy of STRING with any HTML metacharacters escaped.
In order to work in any charset, escapes only E, E, C<">
and C<&> characters.
 
=cut
 
sub _escape_html_weak
{
   my ($string) = @_;
 
   $string =~ s/[<>"&]/$eschtml_map{$1}/eg;
   return $string;
}
 
=item _escape_html_8859_1 ( STRING )
 
Returns a copy of STRING with all but the most commonly
occurring printable characters replaced with HTML entities.
Only suitable for C or C input.
 
=cut
 
sub _escape_html_8859_1
{
   my ($string) = @_;
 
   $string =~ s|([^\w \t\r\n\-\.\,\/\:])| $eschtml_map{$1} |ge;
   return $string;
}
 
=item _escape_html_8859 ( STRING )
 
Returns a copy of STRING with all but the most commonly
occurring printable C characters and characters
that might be printable in some C charset
replaced with HTML entities.
 
=cut
 
sub _escape_html_8859
{
   my ($string) = @_;
 
   $string =~ s|([^\w \t\r\n\-\.\,\/\:\240-\377])| $eschtml_map{$1} |ge;
   return $string;
}
 
=item _strip_nonprint_8859 ( STRING )
 
Returns a copy of STRING with runs of characters that are not
printable in any C charset replaced with spaces.
 
=cut
 
sub _strip_nonprint_8859
{
   my ($string) = @_;
   return '' unless defined $string;
 
   $string =~ tr#\t\n\040-\176\240-\377# #cs;
   return $string;
}
 
=item _strip_nonprint_ascii ( STRING )
 
Returns a copy of STRING with runs of characters that are not
printable C replaced with spaces.
 
=cut
 
sub _strip_nonprint_ascii
{
   my ($string) = @_;
   return '' unless defined $string;
 
   $string =~ tr#\t\n\040-\176# #cs;
   return $string;
}
 
=back
 
=head1 MAINTAINERS
 
The NMS project, Ehttp://nms-cgi.sourceforge.net/E
 
To request support or report bugs, please email
E[email protected]
 
=head1 COPYRIGHT
 
Copyright 2002-2003 London Perl Mongers, All rights reserved
 
=head1 LICENSE
 
This module is free software; you are free to redistribute it
and/or modify it under the same terms as Perl itself.
 
=cut
 
1;
 
 
END_INLINED_CGI_NMS_Charset
  $INC{'CGI/NMS/Charset.pm'} = 1;
}
 
 
unless (eval {local $SIG{__DIE__} ; require CGI::NMS::Mailer::ByScheme}) {
  eval <<'END_INLINED_CGI_NMS_Mailer_ByScheme' or die $@;
package CGI::NMS::Mailer::ByScheme;
use strict;
 
=head1 NAME
 
CGI::NMS::Mailer::ByScheme - mail sending engine switch
 
=head1 SYNOPSYS
 
  my $mailer = CGI::NMS::Mailer::ByScheme->new('/usr/lib/sendmail -oi -t');
 
  my $mailer = CGI::NMS::Mailer::ByScheme->new('SMTP:mailhost.bigisp.net');
 
=head1 DESCRIPTION
 
This implementation of the mailer object defined in L
chooses between L and L
based on the string passed to new().
 
=head1 CONSTRUCTORS
 
=over
 
=item new ( ARGUMENT )
 
ARGUMENT must either be the string C followed by the name or
dotted decimal IP address of an SMTP server that will relay mail
for the web server, or the path to a sendmail compatible binary,
including switches.
 
=cut
 
sub new {
  my ($pkg, $argument) = @_;
 
  if ($argument =~ /^SMTP:([\w\-\.]+(:\d+)?)/i) {
    my $mailhost = $1;
    
do {
  unless (eval {local $SIG{__DIE__} ; require CGI::NMS::Mailer::SMTP}) {
    eval $CGI::NMS::INLINED_SOURCE::CGI_NMS_Mailer_SMTP or die $@;
    $INC{'CGI/NMS/Mailer/SMTP.pm'} = 1;
  }
  undef $CGI::NMS::INLINED_SOURCE::CGI_NMS_Mailer_SMTP; # to save memory
};
 
 
    return CGI::NMS::Mailer::SMTP->new($mailhost);
  }
  else {
    
do {
  unless (eval {local $SIG{__DIE__} ; require CGI::NMS::Mailer::Sendmail}) {
    eval $CGI::NMS::INLINED_SOURCE::CGI_NMS_Mailer_Sendmail or die $@;
    $INC{'CGI/NMS/Mailer/Sendmail.pm'} = 1;
  }
  undef $CGI::NMS::INLINED_SOURCE::CGI_NMS_Mailer_Sendmail; # to save memory
};
 
 
    return CGI::NMS::Mailer::Sendmail->new($argument);
  }
}
 
=back
 
=head1 MAINTAINERS
 
The NMS project, Ehttp://nms-cgi.sourceforge.net/E
 
To request support or report bugs, please email
E[email protected]
 
=head1 COPYRIGHT
 
Copyright 2003 London Perl Mongers, All rights reserved
 
=head1 LICENSE
 
This module is free software; you are free to redistribute it
and/or modify it under the same terms as Perl itself.
 
=cut
 
1;
  
 
END_INLINED_CGI_NMS_Mailer_ByScheme
  $INC{'CGI/NMS/Mailer/ByScheme.pm'} = 1;
}
 
 
unless (eval {local $SIG{__DIE__} ; require CGI::NMS::Script}) {
  eval <<'END_INLINED_CGI_NMS_Script' or die $@;
package CGI::NMS::Script;
use strict;
 
use CGI;
use POSIX qw(locale_h strftime);
use CGI::NMS::Charset;
 
=head1 NAME
 
CGI::NMS::Script - base class for NMS script modules
 
=head1 SYNOPSYS
 
  use base qw(CGI::NMS::Script);
 
  ...
 
=head1 DESCRIPTION
 
This module is a base class for the C modules,
which implement plugin replacements for Matt Wright's Perl CGI
scripts.
 
=head1 CONSTRUCTORS
 
=over
 
=item new ( CONFIG )
 
Creates a new C object and performs compile time
initialisation.
 
CONFIG is a key,value,key,value list, which will be stored as a hash
within the object, under the name C.
 
=cut
 
sub new {
  my ($pkg, @cfg) = @_;
 
  my $self = bless {}, $pkg;
 
  $self->{CFG} = {
    DEBUGGING           => 0,
    emulate_matts_code  => 0,
    secure              => 1,
    locale              => '',
    charset             => 'iso-8859-1',
    style               => '',
    cgi_post_max        => 1000000,
    cgi_disable_uploads => 1,
 
    $self->default_configuration,
 
    @cfg
  };
 
  $self->{Charset} = CGI::NMS::Charset->new( $self->{CFG}{charset} );
 
  $self->init;
 
  return $self;
}
 
=back
 
=item CONFIGURATION SETTINGS
 
Values for the following configuration settings can be passed to new().
 
Subclasses for different NMS scripts will define their own set of
configuration settings, but they all inherit these as well.
 
=over
 
=item C
 
If this is set to a true value, then the error message will be displayed
in the browser if the script suffers a fatal error.  This should be set
to 0 once the script is in service, since error messages may contain
sensitive information such as file paths which could be useful to
attackers.
 
Default: 0
 
=item C
 
The name and version of the NMS script, as a single string.
 
=item C
 
When this variable is set to a true value (e.g. 1) the script will work
in exactly the same way as its counterpart at Matt's Script Archive. If
it is set to a false value (e.g. 0) then more advanced features and
security checks are switched on. We do not recommend changing this 
variable to 1, as the resulting drop in security may leave your script
open to abuse.
 
Default: 0
 
=item C
 
When this variable is set to a true value (e.g. 1) many additional
security features are turned on.  We do not recommend changing this
variable to 0, as the resulting drop in security may leave your script
open to abuse.
 
Default: 1
 
=item C
 
This determines the language that is used in the format_date() method -
by default this is blank and the language will probably be English.
 
Default: ''
 
=item C
 
The character set to use for output documents.
 
Default: 'iso-8859-1'
 
=item C
  
  
    

$title

Below is what you submitted $torecipient on $date


END } =item success_page_fields () Outputs success page HTML output for each input field. =cut sub success_page_fields { my ($self) = @_; foreach my $f (@{ $self->{Field_Order} }) { my $val = (defined $self->{Form}{$f} ? $self->{Form}{$f} : ''); $self->success_page_field( $self->escape_html($f), $self->escape_html($val) ); } } =item success_page_field ( NAME, VALUE ) { Outputs success page HTML for a single input field. NAME and VALUE are the HTML escaped field name and value. =cut sub success_page_field { my ($self, $name, $value) = @_; print "

$name: $value

\n"; } =item success_page_footer () Outputs the footer of the success page, including the return link if configured. =cut sub success_page_footer { my ($self) = @_; print qq{


\n}; $self->success_page_return_link; print <

FormMail © 2001 London Perl Mongers

END } =item success_page_return_link () Outputs the success page return link if any is configured. =cut sub success_page_return_link { my ($self) = @_; if ($self->{FormConfig}{return_link_url} and $self->{FormConfig}{return_link_title}) { print "\n"; } } =item body_attributes () Gets the body attributes for the success page from the form configuration, and returns the string that should go inside the C tag. =cut sub body_attributes { my ($self) = @_; my %attrs = (bgcolor => 'bgcolor', background => 'background', link_color => 'link', vlink_color => 'vlink', alink_color => 'alink', text_color => 'text'); my $attr = ''; foreach my $at (keys %attrs) { my $val = $self->{FormConfig}{$at}; next unless $val; if ($at =~ /color$/) { $val = $self->validate_html_color($val); } elsif ($at eq 'background') { $val = $self->validate_url($val); } else { die "no check defined for body attribute [$at]"; } $attr .= qq( $attrs{$at}=") . $self->escape_html($val) . '"' if $val; } return $attr; } =item error_page( TITLE, ERROR_BODY ) Outputs a FormMail error page, giving the HTML document the title TITLE and displaying the HTML error message ERROR_BODY. =cut sub error_page { my ($self, $title, $error_body) = @_; $self->output_cgi_html_header; my $etitle = $self->escape_html($title); print < $etitle END print < END $self->output_style_element; print <
$etitle
$error_body

FormMail © 2001-2003 London Perl Mongers

END } =item mailer () Returns an object satisfying the definition in L, to be used for sending outgoing email. =cut sub mailer { my ($self) = @_; return $self->{Mailer}; } =back =head1 SEE ALSO L =head1 MAINTAINERS The NMS project, Ehttp://nms-cgi.sourceforge.net/E To request support or report bugs, please email E[email protected] =head1 COPYRIGHT Copyright 2003 London Perl Mongers, All rights reserved =head1 LICENSE This module is free software; you are free to redistribute it and/or modify it under the same terms as Perl itself. =cut 1; END_INLINED_CGI_NMS_Script_FormMail $INC{'CGI/NMS/Script/FormMail.pm'} = 1; } } # # End of inlined modules # use CGI::NMS::Script::FormMail; use base qw(CGI::NMS::Script::FormMail); use vars qw($script); BEGIN { $script = __PACKAGE__->new( DEBUGGING => $DEBUGGING, name_and_version => 'NMS FormMail 3.14c1', emulate_matts_code => $emulate_matts_code, secure => $secure, allow_empty_ref => $allow_empty_ref, max_recipients => $max_recipients, mailprog => $mailprog, postmaster => $postmaster, referers => [@referers], allow_mail_to => [@allow_mail_to], recipients => [@recipients], recipient_alias => {%recipient_alias}, valid_ENV => [@valid_ENV], locale => $locale, charset => $charset, date_fmt => $date_fmt, style => $style, no_content => $no_content, double_spacing => $double_spacing, wrap_text => $wrap_text, wrap_style => $wrap_style, send_confirmation_mail => $send_confirmation_mail, confirmation_text => $confirmation_text, address_style => $address_style, %more_config ); } $script->request;
Open in New Window Select All

Answer : Why does my email show [email protected]<wbr />k instead of my name@ from a form mail script?

Change the name of the "emailAddress" field to "email".
Random Solutions  
 
programming4us programming4us