Skip to content

Instantly share code, notes, and snippets.

@mmilosheski
Created July 2, 2021 11:06
Show Gist options
  • Save mmilosheski/2c33fb24c5208ca1e60840de79c222cc to your computer and use it in GitHub Desktop.
Save mmilosheski/2c33fb24c5208ca1e60840de79c222cc to your computer and use it in GitHub Desktop.
WordPress PHPMailer SMTP
<?php
use PHPMailer\PHPMailer\PHPMailer;
class SMTP {
public function __construct() {
add_action('phpmailer_init', [$this, 'configure_smtp']);
}
public function configure_smtp(PHPMailer $phpmailer) {
$phpmailer->isSMTP();
$phpmailer->Host = 'server.hostname.or.serverip';
$phpmailer->Port = '587';
$phpmailer->SMTPSecure = true;
$phpmailer->SMTPAuth = true;
$phpmailer->Username = 'mailsender@digitalsilk.com';
$phpmailer->Password = 'password';
$phpmailer->From = 'mailsender@digitalsilk.com';
$phpmailer->FromName = 'DigitalSilk';
}
}
@wp-serbia
Copy link

wp-serbia commented Jul 2, 2021

class SMTP_settings {

private $smtp_settings_options;

public function __construct() {
	add_action( 'admin_menu', array( $this, 'smtp_settings_add_plugin_page' ) );
	add_action( 'admin_init', array( $this, 'smtp_settings_page_init' ) );
}

public function smtp_settings_add_plugin_page() {
	add_options_page(
		'SMTP settings',
		'SMTP settings',
		'manage_options',
		'smtp-settings',
		array( $this, 'smtp_settings_create_admin_page' )
	);
}

public function smtp_settings_create_admin_page() {
	$this->smtp_settings_options = get_option( 'smtp_settings_option_name' ); ?>

	<div class="wrap">
		<h2>SMTP settings</h2>
		<p>Please fill all required SMTP settings</p>
		<?php settings_errors(); ?>

		<form method="post" action="options.php">
			<?php
				settings_fields( 'smtp_settings_option_group' );
				do_settings_sections( 'smtp-settings-admin' );
				submit_button();
			?>
		</form>
	</div>
<?php }

public function smtp_settings_page_init() {
	register_setting(
		'smtp_settings_option_group',
		'smtp_settings_option_name',
		array( $this, 'smtp_settings_sanitize' )
	);

	add_settings_section(
		'smtp_settings_setting_section',
		'Settings',
		array( $this, 'smtp_settings_section_info' ),
		'smtp-settings-admin'
	);

	add_settings_field(
		'smtp_server',
		'SMTP server',
		array( $this, 'smtp_server_callback' ),
		'smtp-settings-admin',
		'smtp_settings_setting_section'
	);

	add_settings_field(
		'smtp_port',
		'SMTP port',
		array( $this, 'smtp_port_callback' ),
		'smtp-settings-admin',
		'smtp_settings_setting_section'
	);

	add_settings_field(
		'smtp_secure',
		'SMTP secure',
		array( $this, 'smtp_secure_callback' ),
		'smtp-settings-admin',
		'smtp_settings_setting_section'
	);

	add_settings_field(
		'smtp_auth',
		'SMTP auth',
		array( $this, 'smtp_auth_callback' ),
		'smtp-settings-admin',
		'smtp_settings_setting_section'
	);

	add_settings_field(
		'smtp_username',
		'SMTP username',
		array( $this, 'smtp_username_callback' ),
		'smtp-settings-admin',
		'smtp_settings_setting_section'
	);

	add_settings_field(
		'smtp_password',
		'SMTP password',
		array( $this, 'smtp_password_callback' ),
		'smtp-settings-admin',
		'smtp_settings_setting_section'
	);

	add_settings_field(
		'smtp_mail_from_sender',
		'SMTP mail from sender',
		array( $this, 'smtp_mail_from_sender_callback' ),
		'smtp-settings-admin',
		'smtp_settings_setting_section'
	);

	add_settings_field(
		'smtp_mail_from_name',
		'SMTP mail from name',
		array( $this, 'smtp_mail_from_name_callback' ),
		'smtp-settings-admin',
		'smtp_settings_setting_section'
	);
}

public function smtp_settings_sanitize($input) {
	$sanitary_values = array();
	if ( isset( $input['smtp_server'] ) ) {
		$sanitary_values['smtp_server'] = sanitize_text_field( $input['smtp_server'] );
	}

	if ( isset( $input['smtp_port'] ) ) {
		$sanitary_values['smtp_port'] = sanitize_text_field( $input['smtp_port'] );
	}

	if ( isset( $input['smtp_secure'] ) ) {
		$sanitary_values['smtp_secure'] = $input['smtp_secure'];
	}

	if ( isset( $input['smtp_auth'] ) ) {
		$sanitary_values['smtp_auth'] = $input['smtp_auth'];
	}

	if ( isset( $input['smtp_username'] ) ) {
		$sanitary_values['smtp_username'] = sanitize_text_field( $input['smtp_username'] );
	}

	if ( isset( $input['smtp_password'] ) ) {
		$sanitary_values['smtp_password'] = sanitize_text_field( $input['smtp_password'] );
	}

	if ( isset( $input['smtp_mail_from_sender'] ) ) {
		$sanitary_values['smtp_mail_from_sender'] = sanitize_text_field( $input['smtp_mail_from_sender'] );
	}

	if ( isset( $input['smtp_mail_from_name'] ) ) {
		$sanitary_values['smtp_mail_from_name'] = sanitize_text_field( $input['smtp_mail_from_name'] );
	}

	return $sanitary_values;
}

public function smtp_settings_section_info() {
	
}

public function smtp_server_callback() {
	printf(
		'<input class="regular-text" type="text" name="smtp_settings_option_name[smtp_server]" id="smtp_server" value="%s">',
		isset( $this->smtp_settings_options['smtp_server'] ) ? esc_attr( $this->smtp_settings_options['smtp_server']) : ''
	);
}

public function smtp_port_callback() {
	printf(
		'<input class="regular-text" type="text" name="smtp_settings_option_name[smtp_port]" id="smtp_port" value="%s">',
		isset( $this->smtp_settings_options['smtp_port'] ) ? esc_attr( $this->smtp_settings_options['smtp_port']) : ''
	);
}

public function smtp_secure_callback() {
	?> <select name="smtp_settings_option_name[smtp_secure]" id="smtp_secure">
		<?php $selected = (isset( $this->smtp_settings_options['smtp_secure'] ) && $this->smtp_settings_options['smtp_secure'] === 'false') ? 'selected' : '' ; ?>
		<option value="false" <?php echo $selected; ?>>None</option>
		<?php $selected = (isset( $this->smtp_settings_options['smtp_secure'] ) && $this->smtp_settings_options['smtp_secure'] === 'ssl') ? 'selected' : '' ; ?>
		<option value="ssl" <?php echo $selected; ?>>SSL</option>
		<?php $selected = (isset( $this->smtp_settings_options['smtp_secure'] ) && $this->smtp_settings_options['smtp_secure'] === 'tls') ? 'selected' : '' ; ?>
		<option value="tls" <?php echo $selected; ?>>TLS</option>
	</select> <?php
}

public function smtp_auth_callback() {
	?> <select name="smtp_settings_option_name[smtp_auth]" id="smtp_auth">
		<?php $selected = (isset( $this->smtp_settings_options['smtp_auth'] ) && $this->smtp_settings_options['smtp_auth'] === 'true') ? 'selected' : '' ; ?>
		<option value="true" <?php echo $selected; ?>>True</option>
		<?php $selected = (isset( $this->smtp_settings_options['smtp_auth'] ) && $this->smtp_settings_options['smtp_auth'] === 'false') ? 'selected' : '' ; ?>
		<option value="false" <?php echo $selected; ?>>False</option>
	</select> <?php
}

public function smtp_username_callback() {
	printf(
		'<input class="regular-text" type="text" name="smtp_settings_option_name[smtp_username]" id="smtp_username" value="%s">',
		isset( $this->smtp_settings_options['smtp_username'] ) ? esc_attr( $this->smtp_settings_options['smtp_username']) : ''
	);
}

public function smtp_password_callback() {
	printf(
		'<input class="regular-text" type="password" name="smtp_settings_option_name[smtp_password]" id="smtp_password" value="%s">',
		isset( $this->smtp_settings_options['smtp_password'] ) ? esc_attr( $this->smtp_settings_options['smtp_password']) : ''
	);
}

public function smtp_mail_from_sender_callback() {
	printf(
		'<input class="regular-text" type="text" name="smtp_settings_option_name[smtp_mail_from_sender]" id="smtp_mail_from_sender" value="%s">',
		isset( $this->smtp_settings_options['smtp_mail_from_sender'] ) ? esc_attr( $this->smtp_settings_options['smtp_mail_from_sender']) : ''
	);
}

public function smtp_mail_from_name_callback() {
	printf(
		'<input class="regular-text" type="text" name="smtp_settings_option_name[smtp_mail_from_name]" id="smtp_mail_from_name" value="%s">',
		isset( $this->smtp_settings_options['smtp_mail_from_name'] ) ? esc_attr( $this->smtp_settings_options['smtp_mail_from_name']) : ''
	);
}

}

if (is_admin()){
$smtp_settings = new SMTP_settings();
}

// $smtp_settings_options = get_option( 'smtp_settings_option_name' );
// $smtp_server = $smtp_settings_options['smtp_server'];
// $smtp_port = $smtp_settings_options['smtp_port'];;
// $smtp_secure = $smtp_settings_options['smtp_secure'];
// $smtp_auth = $smtp_settings_options['smtp_auth'];
// $smtp_username = $smtp_settings_options['smtp_username'];
// $smtp_password = $smtp_settings_options['smtp_password'];
// $smtp_mail_from_sender = $smtp_settings_options['smtp_mail_from_sender'];
// $smtp_mail_from_name = $smtp_settings_options['smtp_mail_from_name'];

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment