001 /** 002 * Licensed to the Apache Software Foundation (ASF) under one or more 003 * contributor license agreements. See the NOTICE file distributed with 004 * this work for additional information regarding copyright ownership. 005 * The ASF licenses this file to You under the Apache License, Version 2.0 006 * (the "License"); you may not use this file except in compliance with 007 * the License. You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 */ 017 package org.apache.geronimo.mail; 018 019 import java.util.Properties; 020 021 import org.apache.commons.logging.Log; 022 import org.apache.commons.logging.LogFactory; 023 024 import org.apache.geronimo.gbean.GBeanInfo; 025 import org.apache.geronimo.gbean.GBeanInfoBuilder; 026 027 /** 028 * A GBean that provides for the configuration of a JavaMail SMTP transport 029 * protocol. 030 * <p/> 031 * SMTP transport properties that are common to all SMTP transports are 032 * provided via member variables of this class. Values that are set in the 033 * individual member variables will override any of the corresponding values 034 * that have been set in the properties set. 035 * 036 * @version $Rev: 486195 $ $Date: 2006-12-12 10:42:02 -0500 (Tue, 12 Dec 2006) $ 037 * @see MailGBean 038 */ 039 public class SMTPSTransportGBean extends ProtocolGBean { 040 041 // the SMTPS configuration property names 042 static public final String SMTPS_PORT = "mail.smtp.port"; 043 static public final String SMTPS_CONNECTION_TIMEOUT = "mail.smtp.connectiontimeout"; 044 static public final String SMTPS_TIMEOUT = "mail.smtp.timeout"; 045 static public final String SMTPS_FROM = "mail.smtp.from"; 046 static public final String SMTPS_AUTH = "mail.smtp.auth"; 047 static public final String SMTPS_REALM = "mail.smtp.sasl.realm"; 048 static public final String SMTPS_QUITWAIT = "mail.smtp.quitwait"; 049 static public final String SMTPS_FACTORY_CLASS = "mail.smtp.socketFactory.class"; 050 static public final String SMTPS_FACTORY_FALLBACK = "mail.smtp.socketFactory.fallback"; 051 static public final String SMTPS_FACTORY_PORT = "mail.smtp.socketFactory.port"; 052 static public final String SMTPS_LOCALHOST = "mail.smtp.localhost"; 053 static public final String SMTPS_LOCALADDRESS = "mail.smtp.localaddress"; 054 static public final String SMTPS_LOCALPORT = "mail.smtp.localport"; 055 static public final String SMTPS_EHLO = "mail.smtp.ehlo"; 056 static public final String SMTPS_SUBMITTER = "mail.smtp.submitter"; 057 static public final String SMTPS_DSN_NOTIFY = "mail.smtp.dsn.notify"; 058 static public final String SMTPS_DSN_RET = "mail.smtp.dsn.ret"; 059 static public final String SMTPS_8BITMIME = "mail.smtp.allow8bitmime"; 060 static public final String SMTPS_SEND_PARTIAL = "mail.smtp.sendpartial"; 061 static public final String SMTPS_REPORT_SUCCESS = "mail.smtp.reportsuccess"; 062 static public final String SMTPS_MAIL_EXTENSION = "mail.smtp.mailextension"; 063 static public final String SMTPS_STARTTLS_ENABLE = "mail.smtp.starttls.enable"; 064 065 static public final String GBEAN_EHLO = "ehlo"; 066 static public final String GBEAN_SUBMITTER = "submitter"; 067 static public final String GBEAN_DSN_NOTIFY = "dsnNotify"; 068 static public final String GBEAN_DSN_RET = "dsnRet"; 069 static public final String GBEAN_8BITMIME = "allow8bitmime"; 070 static public final String GBEAN_SEND_PARTIAL = "sendPartical"; 071 static public final String GBEAN_REPORT_SUCCESS = "reportSuccess"; 072 static public final String GBEAN_MAIL_EXTENSION = "mailExtension"; 073 static public final String GBEAN_STARTTLS_ENABLE = "startTLSEnable"; 074 075 private final Log log = LogFactory.getLog(SMTPSTransportGBean.class); 076 077 private Integer port; 078 private Integer connectionTimeout; 079 private Integer timeout; 080 private String from; 081 private String localhost; 082 private String localaddress; 083 private Integer localport; 084 private Boolean ehlo; 085 private Boolean auth; 086 private String submitter; 087 private String dsnNotify; 088 private String dsnRet; 089 private Boolean allow8bitmime; 090 private Boolean sendPartial; 091 private String saslRealm; 092 private Boolean quitWait; 093 private Boolean reportSuccess; 094 private String socketFactoryClass; 095 private Boolean socketFactoryFallback; 096 private Integer socketFactoryPort; 097 private String mailExtension; 098 private Boolean startTLSEnable; 099 100 101 /** 102 * Construct an instance of SMTPSTransportGBean 103 * <p/> 104 * Values that are set in the individual member variables will override any of 105 * the corresponding values that have been set in the properties set. 106 * 107 * @param objectName the object name of the protocol 108 * @param properties the set of default properties for the protocol 109 * @param host the host the protocol connects to 110 * @param user the default name for the protocol 111 * @param port the SMTPS server port 112 * @param connectionTimeout the socket connection timeout value in milliseconds 113 * @param timeout the socket I/O timeout value in milliseconds 114 * @param from the email address to use for SMTPS MAIL command 115 * @param localhost the local host name used in the SMTPS HELO or EHLO command 116 * @param localaddress the local address (host name) to bind to when creating the SMTPS socket 117 * @param localport the local port number to bind to when creating the SMTPS socket 118 * @param ehlo whether an attempt will be made to sign on with the EHLO command 119 * @param auth whether an attempt will be made to authenticate the user using 120 * the AUTH command 121 * @param startTLSEnable the flag that enables the use of the STARTTLS command (if supported by the server) to switch the connection to a TLS-protected connection before issuing any login commands 122 * @param submitter the submitter to use in the AUTH tag in the MAIL FROM command 123 * @param dsnNotify the NOTIFY option to the RCPT command 124 * @param dsnRet the RET option to the MAIL command 125 * @param allow8bitmime whether encodings are converted to use "8bit" under certain 126 * conditions 127 * @param sendPartial whether to send email to valid addresses when others are invalid 128 * @param saslRealm the realm to use with DIGEST-MD5 authentication 129 * @param quitWait whether the transport will wait for the response to the QUIT command 130 * @param reportSuccess whether the transport will include an SMTPAddressSucceededException 131 * for each address that is successful 132 * @param socketFactoryClass the class that will be used to create SMTPS sockets 133 * @param socketFactoryFallback whether java.net.Socket class will be created if the specified 134 * socket factory class cannot be created 135 * @param socketFactoryPort whether java.net.Socket class will be created if the specified 136 * socket factory class cannot be created 137 * @param mailExtension the extension string to append to the MAIL command 138 */ 139 public SMTPSTransportGBean(String objectName, Properties properties, String host, String user, 140 Integer port, 141 Integer connectionTimeout, 142 Integer timeout, 143 String from, 144 String localhost, 145 String localaddress, 146 Integer localport, 147 Boolean ehlo, 148 Boolean auth, 149 Boolean startTLSEnable, 150 String submitter, 151 String dsnNotify, 152 String dsnRet, 153 Boolean allow8bitmime, 154 Boolean sendPartial, 155 String saslRealm, 156 Boolean quitWait, 157 Boolean reportSuccess, 158 String socketFactoryClass, 159 Boolean socketFactoryFallback, 160 Integer socketFactoryPort, 161 String mailExtension) { 162 super(objectName, "smtps", properties, host, user); 163 164 setPort(port); 165 setConnectionTimeout(connectionTimeout); 166 setTimeout(timeout); 167 setFrom(from); 168 setLocalhost(localhost); 169 setLocaladdress(localaddress); 170 setLocalport(localport); 171 setEhlo(ehlo); 172 setAuth(auth); 173 setStartTLSEnable(startTLSEnable); 174 setSubmitter(submitter); 175 setDsnNotify(dsnNotify); 176 setDsnRet(dsnRet); 177 setAllow8bitmime(allow8bitmime); 178 setSendPartial(sendPartial); 179 setSaslRealm(saslRealm); 180 setQuitWait(quitWait); 181 setReportSuccess(reportSuccess); 182 setSocketFactoryClass(socketFactoryClass); 183 setSocketFactoryFallback(socketFactoryFallback); 184 setSocketFactoryPort(socketFactoryPort); 185 setMailExtension(mailExtension); 186 } 187 188 /** 189 * Returns the SMTP server port to connect to, if the connect() method 190 * doesn't explicitly specify one. 191 */ 192 public Integer getPort() { 193 return port; 194 } 195 196 /** 197 * Sets the SMTP server port to connect to, if the connect() method 198 * doesn't explicitly specify one. 199 * <p/> 200 * Defaults to 25. 201 * <p/> 202 * Values that are set here will override any of the corresponding value 203 * that has been set in the properties. 204 * 205 * @param port the SMTP server port to connect to 206 */ 207 public void setPort(Integer port) { 208 this.port = port; 209 } 210 211 /** 212 * Returns the socket connection timeout value in milliseconds. 213 */ 214 public Integer getConnectionTimeout() { 215 return connectionTimeout; 216 } 217 218 /** 219 * Sets the socket connection timeout value in milliseconds. 220 * <p/> 221 * Default is infinite timeout. 222 * <p/> 223 * Values that are set here will override any of the corresponding value 224 * that has been set in the properties. 225 * 226 * @param connectionTimeout the socket connection timeout value in milliseconds. 227 */ 228 public void setConnectionTimeout(Integer connectionTimeout) { 229 this.connectionTimeout = connectionTimeout; 230 } 231 232 /** 233 * Returns the socket I/O timeout value in milliseconds. 234 */ 235 public Integer getTimeout() { 236 return timeout; 237 } 238 239 /** 240 * Sets the socket I/O timeout value in milliseconds. 241 * <p/> 242 * Default is infinite timeout. 243 * <p/> 244 * Values that are set here will override any of the corresponding value 245 * that has been set in the properties. 246 * 247 * @param timeout the socket I/O timeout value in milliseconds 248 */ 249 public void setTimeout(Integer timeout) { 250 this.timeout = timeout; 251 } 252 253 /** 254 * Returns the email address to use for SMTP MAIL command. 255 */ 256 public String getFrom() { 257 return from; 258 } 259 260 /** 261 * Sets the email address to use for SMTP MAIL command 262 * <p/> 263 * Email address to use for SMTP MAIL command. This sets the envelope 264 * return address. Defaults to msg.getFrom() or InternetAddress.getLocalAddress(). 265 * NOTE: mail.smtp.user was previously used for this. 266 * <p/> 267 * Values that are set here will override any of the corresponding value 268 * that has been set in the properties. 269 * 270 * @param from the email address to use for SMTP MAIL command 271 */ 272 public void setFrom(String from) { 273 this.from = from; 274 } 275 276 /** 277 * Returns the local host name used in the SMTP HELO or EHLO command. 278 */ 279 public String getLocalhost() { 280 return localhost; 281 } 282 283 /** 284 * Sets the local host name used in the SMTP HELO or EHLO command. 285 * <p/> 286 * Local host name used in the SMTP HELO or EHLO command. Defaults to 287 * InetAddress.getLocalHost().getHostName(). Should not normally need to 288 * be set if your JDK and your name service are configured properly. 289 * <p/> 290 * Values that are set here will override any of the corresponding value 291 * that has been set in the properties. 292 * 293 * @param localhost the local host name used in the SMTP HELO or EHLO command 294 */ 295 public void setLocalhost(String localhost) { 296 this.localhost = localhost; 297 } 298 299 /** 300 * Returns the local address (host name) to bind to when creating the SMTP socket. 301 */ 302 public String getLocaladdress() { 303 return localaddress; 304 } 305 306 /** 307 * Sets the local address (host name) to bind to when creating the SMTP socket. 308 * <p/> 309 * Local address (host name) to bind to when creating the SMTP socket. 310 * Defaults to the address picked by the Socket class. Should not normally 311 * need to be set, but useful with multi-homed hosts where it's important 312 * to pick a particular local address to bind to. 313 * <p/> 314 * Values that are set here will override any of the corresponding value 315 * that has been set in the properties. 316 * 317 * @param localaddress the local address (host name) to bind to when creating the SMTP socket 318 */ 319 public void setLocaladdress(String localaddress) { 320 this.localaddress = localaddress; 321 } 322 323 /** 324 * Returns the local port number to bind to when creating the SMTP socket. 325 */ 326 public Integer getLocalport() { 327 return localport; 328 } 329 330 /** 331 * Sets the local port number to bind to when creating the SMTP socket. 332 * <p/> 333 * Local port number to bind to when creating the SMTP socket. Defaults to 334 * the port number picked by the Socket class. 335 * <p/> 336 * Values that are set here will override any of the corresponding value 337 * that has been set in the properties. 338 * 339 * @param localport the local port number to bind to when creating the SMTP socket 340 */ 341 public void setLocalport(Integer localport) { 342 this.localport = localport; 343 } 344 345 /** 346 * Returns whether an attempt will be made to sign on with the EHLO command. 347 * <p/> 348 * If false, do not attempt to sign on with the EHLO command. Normally 349 * failure of the EHLO command will fallback to the HELO command; this 350 * property exists only for servers that don't fail EHLO properly or don't 351 * implement EHLO properly. 352 */ 353 public Boolean getEhlo() { 354 return ehlo; 355 } 356 357 /** 358 * Set whether an attempt will be made to sign on with the EHLO command. 359 * <p/> 360 * If false, do not attempt to sign on with the EHLO command. Normally 361 * failure of the EHLO command will fallback to the HELO command; this 362 * property exists only for servers that don't fail EHLO properly or don't 363 * implement EHLO properly. 364 * <p/> 365 * Values that are set here will override any of the corresponding value 366 * that has been set in the properties. 367 * 368 * @param ehlo whether an attempt will be made to sign on with the EHLO command 369 */ 370 public void setEhlo(Boolean ehlo) { 371 this.ehlo = ehlo; 372 } 373 374 /** 375 * Returns whether an attempt will be made to authenticate the user using 376 * the AUTH command. 377 * <p/> 378 * Defaults to false. 379 */ 380 public Boolean getAuth() { 381 return auth; 382 } 383 384 /** 385 * Sets whether an attempt will be made to authenticate the user using 386 * the AUTH command. 387 * <p/> 388 * Defaults to false. 389 * <p/> 390 * Values that are set here will override any of the corresponding value 391 * that has been set in the properties. 392 * 393 * @param auth whether an attempt will be made to authenticate the user using 394 * the AUTH command. 395 */ 396 public void setAuth(Boolean auth) { 397 this.auth = auth; 398 } 399 400 /** 401 * Returns the flag that enables the use of the STARTTLS command (if 402 * supported by the server) to switch the connection to a TLS-protected 403 * connection before issuing any login commands. 404 * <p/> 405 * If true, enables the use of the STARTTLS command (if supported by the 406 * server) to switch the connection to a TLS-protected connection before 407 * issuing any login commands. Note that an appropriate trust store must 408 * configured so that the client will trust the server's certificate. 409 * This feature only works on J2SE 1.4 and newer systems. Default is false. 410 */ 411 public Boolean getStartTLSEnable() { 412 return startTLSEnable; 413 } 414 415 /** 416 * Sets the flag that enables the use of the STARTTLS command (if 417 * supported by the server) to switch the connection to a TLS-protected 418 * connection before issuing any login commands. 419 * <p/> 420 * If true, enables the use of the STARTTLS command (if supported by the 421 * server) to switch the connection to a TLS-protected connection before 422 * issuing any login commands. Note that an appropriate trust store must 423 * configured so that the client will trust the server's certificate. 424 * This feature only works on J2SE 1.4 and newer systems. Default is false. 425 * <p/> 426 * Values that are set here will override any of the corresponding value 427 * that has been set in the properties. 428 * 429 * @param startTLSEnable the flag that enables the use of the STARTTLS command (if 430 * supported by the server) to switch the connection to a TLS-protected 431 * connection before issuing any login commands 432 */ 433 public void setStartTLSEnable(Boolean startTLSEnable) { 434 this.startTLSEnable = startTLSEnable; 435 } 436 437 /** 438 * Returns the submitter to use in the AUTH tag in the MAIL FROM command. 439 * <p/> 440 * Typically used by a mail relay to pass along information about the 441 * original submitter of the message. See also the setSubmitter method of 442 * SMTPMessage. Mail clients typically do not use this. 443 */ 444 public String getSubmitter() { 445 return submitter; 446 } 447 448 /** 449 * Sets the submitter to use in the AUTH tag in the MAIL FROM command. 450 * <p/> 451 * Typically used by a mail relay to pass along information about the 452 * original submitter of the message. See also the setSubmitter method of 453 * SMTPMessage. Mail clients typically do not use this. 454 * <p/> 455 * Values that are set here will override any of the corresponding value 456 * that has been set in the properties. 457 * 458 * @param submitter the submitter to use in the AUTH tag in the MAIL FROM command 459 */ 460 public void setSubmitter(String submitter) { 461 this.submitter = submitter; 462 } 463 464 /** 465 * Returns the NOTIFY option to the RCPT command. 466 * <p/> 467 * Either NEVER, or some combination of SUCCESS, FAILURE, and DELAY 468 * (separated by commas). 469 */ 470 public String getDsnNotify() { 471 return dsnNotify; 472 } 473 474 /** 475 * Sets the NOTIFY option to the RCPT command 476 * <p/> 477 * Either NEVER, or some combination of SUCCESS, FAILURE, and DELAY 478 * (separated by commas). 479 * <p/> 480 * Values that are set here will override any of the corresponding value 481 * that has been set in the properties. 482 * 483 * @param dsnNotify the NOTIFY option to the RCPT command 484 */ 485 public void setDsnNotify(String dsnNotify) { 486 this.dsnNotify = dsnNotify; 487 } 488 489 /** 490 * Returns the RET option to the MAIL command. 491 * <p/> 492 * Either FULL or HDRS. 493 */ 494 public String getDsnRet() { 495 return dsnRet; 496 } 497 498 /** 499 * Sets the RET option to the MAIL command 500 * <p/> 501 * Either FULL or HDRS. 502 * <p/> 503 * Values that are set here will override any of the corresponding value 504 * that has been set in the properties. 505 * 506 * @param dsnRet the RET option to the MAIL command 507 */ 508 public void setDsnRet(String dsnRet) { 509 this.dsnRet = dsnRet; 510 } 511 512 /** 513 * Returns whether encodings are converted to use "8bit" under certain 514 * conditions. 515 * <p/> 516 * If set to true, and the server supports the 8BITMIME extension, text 517 * parts of messages that use the "quoted-printable" or "base64" encodings 518 * are converted to use "8bit" encoding if they follow the RFC2045 rules 519 * for 8bit text. 520 */ 521 public Boolean getAllow8bitmime() { 522 return allow8bitmime; 523 } 524 525 /** 526 * Sets whether encodings are converted to use "8bit" under certain 527 * conditions. 528 * <p/> 529 * If set to true, and the server supports the 8BITMIME extension, text 530 * parts of messages that use the "quoted-printable" or "base64" encodings 531 * are converted to use "8bit" encoding if they follow the RFC2045 rules 532 * for 8bit text. 533 * <p/> 534 * Values that are set here will override any of the corresponding value 535 * that has been set in the properties. 536 * 537 * @param allow8bitmime whether encodings are converted to use "8bit" under certain 538 * conditions 539 */ 540 public void setAllow8bitmime(Boolean allow8bitmime) { 541 this.allow8bitmime = allow8bitmime; 542 } 543 544 /** 545 * Returns whether to send email to valid addresses when others are invalid. 546 * <p/> 547 * If set to true, and a message has some valid and some invalid addresses, 548 * send the message anyway, reporting the partial failure with a 549 * SendFailedException. If set to false (the default), the message is not 550 * sent to any of the recipients if there is an invalid recipient address. 551 */ 552 public Boolean getSendPartial() { 553 return sendPartial; 554 } 555 556 /** 557 * Sets whether to send email to valid addresses when others are invalid. 558 * <p/> 559 * If set to true, and a message has some valid and some invalid addresses, 560 * send the message anyway, reporting the partial failure with a 561 * SendFailedException. If set to false (the default), the message is not 562 * sent to any of the recipients if there is an invalid recipient address. 563 * <p/> 564 * Values that are set here will override any of the corresponding value 565 * that has been set in the properties. 566 * 567 * @param sendPartial whether to send email to valid addresses when others are invalid 568 */ 569 public void setSendPartial(Boolean sendPartial) { 570 this.sendPartial = sendPartial; 571 } 572 573 /** 574 * Returns the realm to use with DIGEST-MD5 authentication. 575 */ 576 public String getSaslRealm() { 577 return saslRealm; 578 } 579 580 /** 581 * Sets the realm to use with DIGEST-MD5 authentication. 582 * <p/> 583 * Values that are set here will override any of the corresponding value 584 * that has been set in the properties. 585 * 586 * @param saslRealm the realm to use with DIGEST-MD5 authentication 587 */ 588 public void setSaslRealm(String saslRealm) { 589 this.saslRealm = saslRealm; 590 } 591 592 /** 593 * Returns whether the transport will wait for the response to the QUIT command. 594 * <p/> 595 * If set to true, causes the transport to wait for the response to the QUIT 596 * command. If set to false (the default), the QUIT command is sent and the 597 * connection is immediately closed. 598 */ 599 public Boolean getQuitWait() { 600 return quitWait; 601 } 602 603 /** 604 * Sets whether the transport will wait for the response to the QUIT command 605 * <p/> 606 * If set to true, causes the transport to wait for the response to the QUIT 607 * command. If set to false (the default), the QUIT command is sent and the 608 * connection is immediately closed. 609 * <p/> 610 * Values that are set here will override any of the corresponding value 611 * that has been set in the properties. 612 * 613 * @param quitWait whether the transport will wait for the response to the QUIT command 614 */ 615 public void setQuitWait(Boolean quitWait) { 616 this.quitWait = quitWait; 617 } 618 619 /** 620 * Returns whether the transport will include an SMTPAddressSucceededException 621 * for each address that is successful. 622 * <p/> 623 * Note also that this will cause a SendFailedException to be thrown from 624 * the sendMessage method of SMTPTransport even if all addresses were 625 * correct and the message was sent successfully. 626 */ 627 public Boolean getReportSuccess() { 628 return reportSuccess; 629 } 630 631 /** 632 * Sets whether the transport will include an SMTPAddressSucceededException 633 * for each address that is successful. 634 * <p/> 635 * Note also that this will cause a SendFailedException to be thrown from 636 * the sendMessage method of SMTPTransport even if all addresses were 637 * correct and the message was sent successfully. 638 * <p/> 639 * Values that are set here will override any of the corresponding value 640 * that has been set in the properties. 641 * 642 * @param reportSuccess whether the transport will include an SMTPAddressSucceededException 643 * for each address that is successful 644 */ 645 public void setReportSuccess(Boolean reportSuccess) { 646 this.reportSuccess = reportSuccess; 647 } 648 649 /** 650 * Returns the class that will be used to create SMTP sockets. 651 * <p/> 652 * If set, specifies the name of a class that implements the 653 * javax.net.SocketFactory interface. This class will be used to create SMTP 654 * sockets. 655 */ 656 public String getSocketFactoryClass() { 657 return socketFactoryClass; 658 } 659 660 /** 661 * Sets the class that will be used to create SMTP sockets. 662 * <p/> 663 * If set, specifies the name of a class that implements the 664 * javax.net.SocketFactory interface. This class will be used to create SMTP 665 * sockets. 666 * <p/> 667 * Values that are set here will override any of the corresponding value 668 * that has been set in the properties. 669 * 670 * @param socketFactoryClass the class that will be used to create SMTP sockets 671 */ 672 public void setSocketFactoryClass(String socketFactoryClass) { 673 this.socketFactoryClass = socketFactoryClass; 674 } 675 676 /** 677 * Returns whether java.net.Socket class will be created if the specified 678 * socket factory class cannot be created. 679 * <p/> 680 * If set to true, failure to create a socket using the specified socket 681 * factory class will cause the socket to be created using the 682 * java.net.Socket class. Defaults to true. 683 */ 684 public Boolean getSocketFactoryFallback() { 685 return socketFactoryFallback; 686 } 687 688 /** 689 * Sets whether java.net.Socket class will be created if the specified 690 * socket factory class cannot be created. 691 * <p/> 692 * If set to true, failure to create a socket using the specified socket 693 * factory class will cause the socket to be created using the 694 * java.net.Socket class. Defaults to true. 695 * <p/> 696 * Values that are set here will override any of the corresponding value 697 * that has been set in the properties. 698 * 699 * @param socketFactoryFallback whether java.net.Socket class will be created if the specified 700 * socket factory class cannot be created 701 */ 702 public void setSocketFactoryFallback(Boolean socketFactoryFallback) { 703 this.socketFactoryFallback = socketFactoryFallback; 704 } 705 706 /** 707 * Returns the port to connect to when using the specified socket factory. 708 * <p/> 709 * Specifies the port to connect to when using the specified socket 710 * factory. If not set, the default port will be used. 711 */ 712 public Integer getSocketFactoryPort() { 713 return socketFactoryPort; 714 } 715 716 /** 717 * Sets the port to connect to when using the specified socket factory. 718 * <p/> 719 * Specifies the port to connect to when using the specified socket 720 * factory. If not set, the default port will be used. 721 * <p/> 722 * Values that are set here will override any of the corresponding value 723 * that has been set in the properties. 724 * 725 * @param socketFactoryPort the port to connect to when using the specified socket factory 726 */ 727 public void setSocketFactoryPort(Integer socketFactoryPort) { 728 this.socketFactoryPort = socketFactoryPort; 729 } 730 731 /** 732 * Returns the extension string to append to the MAIL command. 733 * <p/> 734 * Extension string to append to the MAIL command. The extension string 735 * can be used to specify standard SMTP service extensions as well as 736 * vendor-specific extensions. Typically the application should use the 737 * SMTPTransport method supportsExtension to verify that the server 738 * supports the desired service extension. See RFC 1869 and other RFCs 739 * that define specific extensions. 740 */ 741 public String getMailExtension() { 742 return mailExtension; 743 } 744 745 /** 746 * Sets the extension string to append to the MAIL command. 747 * <p/> 748 * Extension string to append to the MAIL command. The extension string 749 * can be used to specify standard SMTP service extensions as well as 750 * vendor-specific extensions. Typically the application should use the 751 * SMTPTransport method supportsExtension to verify that the server 752 * supports the desired service extension. See RFC 1869 and other RFCs 753 * that define specific extensions. 754 * <p/> 755 * Values that are set here will override any of the corresponding value 756 * that has been set in the properties. 757 * 758 * @param mailExtension the extension string to append to the MAIL command 759 */ 760 public void setMailExtension(String mailExtension) { 761 this.mailExtension = mailExtension; 762 } 763 764 /** 765 * Add the overrides from the member variables to the properties file. 766 */ 767 public void addOverrides(Properties props) { 768 super.addOverrides(props); 769 770 if (port != null) props.setProperty(SMTPS_PORT, port.toString()); 771 if (connectionTimeout != null) props.setProperty(SMTPS_CONNECTION_TIMEOUT, connectionTimeout.toString()); 772 if (timeout != null) props.setProperty(SMTPS_TIMEOUT, timeout.toString()); 773 if (from != null) props.setProperty(SMTPS_FROM, from); 774 if (localhost != null) props.setProperty(SMTPS_LOCALHOST, localhost); 775 if (localaddress != null) props.setProperty(SMTPS_LOCALADDRESS, localaddress); 776 if (localport != null) props.setProperty(SMTPS_LOCALPORT, localport.toString()); 777 if (ehlo != null) props.setProperty(SMTPS_EHLO, ehlo.toString()); 778 if (auth != null) props.setProperty(SMTPS_AUTH, auth.toString()); 779 if (startTLSEnable != null) props.setProperty(SMTPS_STARTTLS_ENABLE, startTLSEnable.toString()); 780 if (submitter != null) props.setProperty(SMTPS_SUBMITTER, submitter); 781 if (dsnNotify != null) props.setProperty(SMTPS_DSN_NOTIFY, dsnNotify.toString()); 782 if (dsnRet != null) props.setProperty(SMTPS_DSN_RET, dsnRet.toString()); 783 if (allow8bitmime != null) props.setProperty(SMTPS_8BITMIME, allow8bitmime.toString()); 784 if (sendPartial != null) props.setProperty(SMTPS_SEND_PARTIAL, sendPartial.toString()); 785 if (saslRealm != null) props.setProperty(SMTPS_REALM, saslRealm); 786 if (quitWait != null) props.setProperty(SMTPS_QUITWAIT, quitWait.toString()); 787 if (reportSuccess != null) props.setProperty(SMTPS_REPORT_SUCCESS, reportSuccess.toString()); 788 if (socketFactoryClass != null) props.setProperty(SMTPS_FACTORY_CLASS, socketFactoryClass); 789 if (socketFactoryFallback != null) props.setProperty(SMTPS_FACTORY_FALLBACK, socketFactoryFallback.toString()); 790 if (socketFactoryPort != null) props.setProperty(SMTPS_FACTORY_PORT, socketFactoryPort.toString()); 791 if (mailExtension != null) props.setProperty(SMTPS_MAIL_EXTENSION, mailExtension); 792 } 793 794 public void doStart() throws Exception { 795 log.debug("Started " + getObjectName()); 796 } 797 798 public void doStop() throws Exception { 799 log.debug("Stopped " + getObjectName()); 800 } 801 802 public void doFail() { 803 log.warn("Failed " + getObjectName()); 804 } 805 806 public static final GBeanInfo GBEAN_INFO; 807 808 static { 809 GBeanInfoBuilder infoFactory = GBeanInfoBuilder.createStatic(SMTPSTransportGBean.class); 810 811 infoFactory.addAttribute(GBEAN_PORT, Integer.class, true); 812 infoFactory.addAttribute(GBEAN_CONNECTION_TIMEOUT, Integer.class, true); 813 infoFactory.addAttribute(GBEAN_TIMEOUT, Integer.class, true); 814 infoFactory.addAttribute(GBEAN_AUTH, Boolean.class, true); 815 infoFactory.addAttribute(GBEAN_STARTTLS_ENABLE, Boolean.class, true); 816 infoFactory.addAttribute(GBEAN_EHLO, Boolean.class, true); 817 infoFactory.addAttribute(GBEAN_FROM, String.class, true); 818 infoFactory.addAttribute(GBEAN_LOCALHOST, String.class, true); 819 infoFactory.addAttribute(GBEAN_LOCALADDRESS, String.class, true); 820 infoFactory.addAttribute(GBEAN_LOCALPORT, Integer.class, true); 821 infoFactory.addAttribute(GBEAN_REALM, String.class, true); 822 infoFactory.addAttribute(GBEAN_QUITWAIT, Boolean.class, true); 823 infoFactory.addAttribute(GBEAN_FACTORY_CLASS, String.class, true); 824 infoFactory.addAttribute(GBEAN_FACTORY_FALLBACK, Boolean.class, true); 825 infoFactory.addAttribute(GBEAN_FACTORY_PORT, Integer.class, true); 826 827 infoFactory.addAttribute(GBEAN_SUBMITTER, String.class, true); 828 infoFactory.addAttribute(GBEAN_DSN_NOTIFY, String.class, true); 829 infoFactory.addAttribute(GBEAN_DSN_RET, String.class, true); 830 infoFactory.addAttribute(GBEAN_8BITMIME, Boolean.class, true); 831 infoFactory.addAttribute(GBEAN_SEND_PARTIAL, Boolean.class, true); 832 infoFactory.addAttribute(GBEAN_REPORT_SUCCESS, Boolean.class, true); 833 infoFactory.addAttribute(GBEAN_MAIL_EXTENSION, String.class, true); 834 835 infoFactory.addAttribute(GBEAN_OBJECTNAME, String.class, false); 836 infoFactory.addAttribute(GBEAN_PROTOCOL, String.class, true); 837 infoFactory.addAttribute(GBEAN_PROPERTIES, Properties.class, true); 838 infoFactory.addAttribute(GBEAN_HOST, String.class, true); 839 infoFactory.addAttribute(GBEAN_USER, String.class, true); 840 infoFactory.addOperation(GBEAN_ADD_OVERRIDES, new Class[]{Properties.class}); 841 842 infoFactory.setConstructor(new String[]{GBEAN_OBJECTNAME, GBEAN_PROPERTIES, GBEAN_HOST, GBEAN_USER, 843 GBEAN_PORT, 844 GBEAN_CONNECTION_TIMEOUT, 845 GBEAN_TIMEOUT, 846 GBEAN_FROM, 847 GBEAN_LOCALHOST, 848 GBEAN_LOCALADDRESS, 849 GBEAN_LOCALPORT, 850 GBEAN_EHLO, 851 GBEAN_AUTH, 852 GBEAN_STARTTLS_ENABLE, 853 GBEAN_SUBMITTER, 854 GBEAN_DSN_NOTIFY, 855 GBEAN_DSN_RET, 856 GBEAN_8BITMIME, 857 GBEAN_SEND_PARTIAL, 858 GBEAN_REALM, 859 GBEAN_QUITWAIT, 860 GBEAN_REPORT_SUCCESS, 861 GBEAN_FACTORY_CLASS, 862 GBEAN_FACTORY_FALLBACK, 863 GBEAN_FACTORY_PORT, 864 GBEAN_MAIL_EXTENSION}); 865 866 GBEAN_INFO = infoFactory.getBeanInfo(); 867 } 868 869 public static GBeanInfo getGBeanInfo() { 870 return GBEAN_INFO; 871 } 872 } 873