📄 emailservice.java
字号:
resolvedValue = STAFUtil.resolveRequestVar( parsedRequest.optionValue("textattachment", i + 1), fHandle, info.requestNumber); if (resolvedValue.rc != 0) return resolvedValue; textAttachments.add(resolvedValue.result); } } if (parsedRequest.optionTimes("binaryattachment") > 0) { int binaryAttachmentCount = parsedRequest.optionTimes("binaryattachment"); for (int i = 0; i < binaryAttachmentCount; i++) { resolvedValue = STAFUtil.resolveRequestVar( parsedRequest.optionValue("binaryattachment", i + 1), fHandle, info.requestNumber); if (resolvedValue.rc != 0) return resolvedValue; binaryAttachments.add(resolvedValue.result); } } String message = "SEND TO " + toList.toString() + " FROM " + from + " SUBJECT " + subjectOption + " CONTENTTYPE " + contentType; if (textAttachments.size() > 0) { message += " TEXTATTACHMENTS " + textAttachments.toString(); } if (binaryAttachments.size() > 0) { message += " BINARYATTACHMENTS " + binaryAttachments.toString(); } fHandle.submit2( "local", "LOG", "LOG MACHINE LOGNAME " + fServiceName + " LEVEL info MESSAGE " + STAFUtil.wrapData(message)); for (int j = 0; j < toList.size(); j++) { String level = ""; String to = (String)toList.elementAt(j); fSocket = new Socket(fMailserver, fMailport); fInStream = new BufferedReader( new InputStreamReader(fSocket.getInputStream())); fOutStream = new PrintStream(fSocket.getOutputStream()); reply = fInStream.readLine(); level = (reply.startsWith("4") || reply.startsWith("5")) ? "error" : "info"; fHandle.submit2("local", "LOG", "LOG MACHINE LOGNAME " + fServiceName + " LEVEL " + level + " MESSAGE " + STAFUtil.wrapData(reply)); if (level.equals("error")) return new STAFResult( new Integer("4" + reply.substring(0, 3)).intValue(), reply); fOutStream.print("HELO " + fHostname); fOutStream.println(fLineEnd); fOutStream.flush(); reply = fInStream.readLine(); level = (reply.startsWith("4") || reply.startsWith("5")) ? "error" : "info"; fHandle.submit2("local", "LOG", "LOG MACHINE LOGNAME " + fServiceName + " LEVEL " + level + " MESSAGE " + STAFUtil.wrapData(reply)); if (level.equals("error")) return new STAFResult( new Integer("4" + reply.substring(0, 3)).intValue(), reply); fOutStream.print("MAIL FROM: " + from); fOutStream.println(fLineEnd); fOutStream.flush(); reply = fInStream.readLine(); level = (reply.startsWith("4") || reply.startsWith("5")) ? "error" : "info"; fHandle.submit2("local", "LOG", "LOG MACHINE LOGNAME " + fServiceName + " LEVEL " + level + " MESSAGE " + STAFUtil.wrapData(reply)); if (level.equals("error")) return new STAFResult( new Integer("4" + reply.substring(0, 3)).intValue(), reply); fOutStream.print("RCPT TO: " + to); fOutStream.println(fLineEnd); fOutStream.flush(); reply = fInStream.readLine(); level = (reply.startsWith("4") || reply.startsWith("5")) ? "error" : "info"; fHandle.submit2("local", "LOG", "LOG MACHINE LOGNAME " + fServiceName + " LEVEL " + level + " MESSAGE " + STAFUtil.wrapData(reply)); if (level.equals("error")) return new STAFResult( new Integer("4" + reply.substring(0, 3)).intValue(), reply); fOutStream.print("DATA"); fOutStream.println(fLineEnd); fOutStream.flush(); // Some external SMTP servers require the following line fInStream.readLine(); fOutStream.print("MIME-Version: 1.0"); fOutStream.println(fLineEnd); fOutStream.flush(); fOutStream.print("To: " + to); fOutStream.println(fLineEnd); fOutStream.flush(); fOutStream.print("Subject: " + subjectOption); fOutStream.println(fLineEnd); fOutStream.flush(); fOutStream.print("From: " + from); fOutStream.println(fLineEnd); fOutStream.flush(); String strBoundary = "DataSeparatorString"; fOutStream.print("Content-Type: multipart/mixed; " + "boundary=\"" + strBoundary + "\""); fOutStream.println(fLineEnd); fOutStream.flush(); fOutStream.print("--" + strBoundary); fOutStream.println(fLineEnd); fOutStream.flush(); fOutStream.print("Content-Type: " + contentType + "; charset=us-ascii"); fOutStream.println(fLineEnd); fOutStream.flush(); fOutStream.print("Content-Transfer-Encoding: 7bit"); fOutStream.println(fLineEnd); fOutStream.flush(); fOutStream.print(""); fOutStream.println(fLineEnd); fOutStream.flush(); if (includeHeader) { if (contentType.equals(sTextPlainContentType)) { fOutStream.print(sPlainHeader); } else { fOutStream.print(sHtmlHeader); } fOutStream.println(fLineEnd); fOutStream.flush(); } fOutStream.print(messageOption); fOutStream.println(fLineEnd); fOutStream.flush(); fOutStream.println(fLineEnd); fOutStream.flush(); for (int k = 0; k < textAttachments.size(); k++) { String attachmentFile = (String)textAttachments.elementAt(k); int forwardSlashIndex = attachmentFile.lastIndexOf("/"); int backwardSlashIndex = attachmentFile.lastIndexOf("\\"); int filenameIndex; if (forwardSlashIndex > backwardSlashIndex) filenameIndex = forwardSlashIndex; else filenameIndex = backwardSlashIndex; String attachmentFileName = attachmentFile.substring(filenameIndex); STAFResult fileResult = fHandle.submit2(attachmentMachine, "FS", "GET FILE " + attachmentFile + " text"); if (fileResult.rc != STAFResult.Ok) return fileResult; fOutStream.print("--" + strBoundary); fOutStream.println(fLineEnd); fOutStream.flush(); fOutStream.print("Content-Type: text/plain; name=\"" + attachmentFileName + "\""); fOutStream.println(fLineEnd); fOutStream.flush(); fOutStream.print("Content-Transfer-Encoding: 7bit"); fOutStream.println(fLineEnd); fOutStream.flush(); fOutStream.print("Content-Disposition: attachment; " + "filename=\"" + attachmentFileName + "\""); fOutStream.println(fLineEnd); fOutStream.flush(); fOutStream.print("Content-Description: Form Results"); fOutStream.println(fLineEnd); fOutStream.flush(); fOutStream.print(""); fOutStream.println(fLineEnd); fOutStream.flush(); fOutStream.print(fileResult.result); fOutStream.println(fLineEnd); fOutStream.flush(); fOutStream.print("--" + strBoundary); fOutStream.println(fLineEnd); fOutStream.flush(); fOutStream.print(""); fOutStream.println(fLineEnd); fOutStream.flush(); } for (int k = 0; k < binaryAttachments.size(); k++) { String attachmentFile = (String)binaryAttachments.elementAt(k); int forwardSlashIndex = attachmentFile.lastIndexOf("/"); int backwardSlashIndex = attachmentFile.lastIndexOf("\\"); int filenameIndex; if (forwardSlashIndex > backwardSlashIndex) filenameIndex = forwardSlashIndex; else filenameIndex = backwardSlashIndex; String attachmentFileName = attachmentFile.substring(filenameIndex); STAFResult fileResult = fHandle.submit2(attachmentMachine, "FS", "GET FILE " + attachmentFile + " binary"); if (fileResult.rc != STAFResult.Ok) return fileResult; fOutStream.print("--" + strBoundary); fOutStream.println(fLineEnd); fOutStream.flush(); fOutStream.print("Content-Type: " + "application/octet-stream; name=\"" + attachmentFileName + "\""); fOutStream.println(fLineEnd); fOutStream.flush(); fOutStream.print("Content-Transfer-Encoding: base64"); fOutStream.println(fLineEnd); fOutStream.flush(); fOutStream.print("Content-Disposition: attachment; " + "filename=\"" + attachmentFileName + "\""); fOutStream.println(fLineEnd); fOutStream.flush(); fOutStream.print("Content-Description: Form Results"); fOutStream.println(fLineEnd); fOutStream.flush(); fOutStream.print(""); fOutStream.println(fLineEnd); fOutStream.flush(); String getFileResult = fileResult.result; byte[] fileContent = new byte[getFileResult.length() / 2]; fileContent[0] = (byte)Integer.parseInt( getFileResult.substring(0, 2), 16); for (int i = 1; i < fileContent.length; i++) { fileContent[i] = (byte) Integer.parseInt(getFileResult.substring( i*2, i*2 + 2), 16); } byte[] base64FileContent = base64.encodeBase64Chunked(fileContent); fOutStream.write(base64FileContent, 0, base64FileContent.length); fOutStream.println(fLineEnd); fOutStream.flush(); fOutStream.print("--" + strBoundary); fOutStream.println(fLineEnd); fOutStream.flush(); fOutStream.print(""); fOutStream.println(fLineEnd); fOutStream.flush(); } fOutStream.print(fLineEnd); fOutStream.print("."); fOutStream.println(fLineEnd); fOutStream.print(""); fOutStream.println(fLineEnd); fOutStream.flush(); fOutStream.print("QUIT"); fOutStream.println(fLineEnd); fOutStream.flush(); reply = fInStream.readLine(); level = (reply.startsWith("4") || reply.startsWith("5")) ? "error" : "info"; fHandle.submit2("local", "LOG", "LOG MACHINE LOGNAME " + fServiceName + " LEVEL " + level + " MESSAGE " + STAFUtil.wrapData(reply)); if (level.equals("error")) return new STAFResult( new Integer("4" + reply.substring(0, 3)).intValue(), reply); fSocket.close(); } } catch ( IOException ioe ) { String error = "Socket IO Error: " + ioe + " Mailserver: " + fMailserver + " Port: " + fMailport; fHandle.submit2("local", "LOG", "LOG MACHINE LOGNAME " + fServiceName + " LEVEL error MESSAGE " + STAFUtil.wrapData(error)); return new STAFResult(IOEXCEPTION, error); } } catch (Exception e) { return new STAFResult(STAFResult.JavaError, "Internal Java error."); } return new STAFResult(STAFResult.Ok, resultString); } public STAFResult term() { // Un-register the service handle try { fHandle.unRegister(); } catch (STAFException ex) { return new STAFResult( STAFResult.STAFRegistrationError, ex.toString()); } return new STAFResult(STAFResult.Ok); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -