FORGOT YOUR DETAILS?

CREATE ACCOUNT

Unison Help

  1. Unison Kernel
    1. Pthreads
      1. pthread_create()
      2. pthread_exit()
      3. pthread_self()
      4. pthread_equal()
      5. pthread_join()
      6. pthread_detach()
      7. pthread_setschedparam()
      8. pthread_getschedparam()
      9. pthread_attr_init()
      10. pthread_attr_destroy()
      11. pthread_attr_setstackaddr()
      12. pthread_attr_getstackaddr()
      13. pthread_attr_setstacksize()
      14. pthread_attr_getstacksize()
      15. pthread_attr_setschedparam()
      16. pthread_attr_getschedparam()
      17. pthread_attr_setdetachstate()
      18. pthread_attr_getdetachstate()
      19. pthread_stackinfo()
      20. pthread_setprio()
      21. pthread_getprio()
      22. sched_get_priority_max()
      23. sched_get_priority_min()
      24. sched_yield()
    2. Pthread Cancellation
      1. pthread_cleanup_pop()
      2. pthread_cleanup_push()
      3. pthread_cancel()
      4. pthread_setcanceltype()
      5. pthread_setcancelstate()
      6. pthread_testcancel()
    3. Mutex
      1. pthread_mutex_init()
      2. pthread_mutex_destroy()
      3. pthread_mutex_lock()
      4. pthread_mutex_trylock()
      5. pthread_mutex_unlock()
    4. Semaphores
      1. sem_open()
      2. sem_close()
      3. sem_unlink()
      4. sem_init()
      5. sem_destroy()
      6. sem_wait()
      7. sem_trywait()
      8. sem_timedwait()
      9. sem_post()
      10. sem_getvalue()
    5. Message Queues
      1. mq_open()
      2. mq_close()
      3. mq_unlink()
      4. mq_send()
      5. mq_receive()
      6. mq_notify()
      7. mq_setattr()
      8. mq_getattr()
      9. mq_timedreceive()
      10. mq_timedsend()
    6. Conditional Variables
      1. pthread_cond_init()
      2. pthread_cond_destroy()
      3. pthread_cond_wait()
      4. pthread_cond_timedwait()
      5. pthread_cond_signal()
      6. pthread_cond_broadcast()
      7. pthread_condattr_init()
      8. pthread_condattr_destroy()
    7. Barriers
      1. pthread_barrier_init()
      2. pthread_barrier_destroy()
      3. pthread_barrier_wait()
    8. Timers
      1. timer_create()
      2. timer_delete()
      3. timer_settime()
      4. timer_gettime()
      5. timer_getoverrun()
      6. timer_tick()
      7. nanosleep()
    9. Clocks
      1. time()
      2. uptime()
      3. sleep()
      4. clock_settime()
      5. clock_gettime()
      6. clock_getres()
      7. clock_init()
    10. Memory Allocation
      1. POSIX.1
        1. malloc()
        2. free()
      2. Variable Length (Pools)
        1. pool_create()
        2. pool_destroy()
        3. pool_alloc()
        4. pool_free()
      3. Fixed Length (Partitions)
        1. pt_create()
        2. pt_destroy()
        3. pt_getblock()
        4. pt_freeblock()
    11. Rendezvous
      1. mr_init()
      2. mr_send()
      3. mr_receive()
      4. mr_reply()
      5. mr_sigrecv()
      6. mr_sigpost()
    12. Interrupts
      1. interrupts
      2. i_disable()
      3. i_restore()
    13. Directory Services
      1. dir_register()
      2. dir_deregister()
      3. dir_lookup()
      4. dir_lookup_string()
    14. Miscellaneous
      1. checkIstack()
      2. NanoStart() or DSPexec_Start()
      3. _isrStackFill
      4. Kernel Scaling
      5. kfatal()
      6. kalloc()
      7. kfree()
      8. mpu or mmu
      9. pthreadStackFill
      10. thread_numb()
      11. thread_utilization_start()
      12. thread_utilization_stop()
      13. xprintf()
      14. xputs()
      15. xputchar()
  2. Unison I/O Library
    1. accept()
    2. bind()
    3. chmod()
    4. close()
    5. connect()
    6. creat()
    7. fstat()
    8. getpeername()
    9. getsockname()
    10. getsockopt()
    11. ioctl()
    12. link()
    13. listen()
    14. lseek()
    15. mkdir()
    16. mkfs()
    17. mount()
    18. open()
    19. read()
    20. recv()
    21. recvfrom()
    22. rename()
    23. renameat()
    24. rmdir()
    25. select()
    26. send()
    27. sendto()
    28. setsockopt()
    29. shutdown()
    30. socket()
    31. stat()
    32. sync()
    33. umount()
    34. unlink()
    35. write()
  3. Unison STDIO Library
    1. STDIO Library Calls
      1. clearerr()
      2. dprintf()
      3. fclose()
      4. fdopen()
      5. feof()
      6. ferror()
      7. fileno()
      8. fflush()
      9. fgetc()
      10. fgetpos()
      11. fgets()
      12. fopen()
      13. fprintf()
      14. fputc()
      15. fputs()
      16. fread()
      17. freopen()
      18. fscanf()
      19. fseek()
      20. fseeko()
      21. fsetpos()
      22. ftell()
      23. ftello()
      24. fwrite()
      25. getc()
      26. getc_unlocked()
      27. getchar()
      28. getchar_unlocked()
      29. getdelim()
      30. getline()
      31. gets()
      32. get_stderr_ptr()
      33. get_stdin_ptr()
      34. get_stdout_ptr()
      35. noperprintf()
      36. perprintf()
      37. perror()
      38. posix_compat()
      39. printf()
      40. putc()
      41. putc_unlocked()
      42. putchar()
      43. putchar_unlocked()
      44. puts()
      45. remove()
      46. rewind()
      47. scanf()
      48. setbuf()
      49. setvbuf()
      50. snprintf()
      51. sprintf()
      52. sscanf()
      53. stderr_init()
      54. stderr_close()
      55. stdin_init()
      56. stdin_close()
      57. stdout_init()
      58. stdout_close()
      59. vdprintf()
      60. vscanf()
      61. vsscanf()
      62. vfscanf()
      63. vprintf()
      64. vsnprintf()
      65. vsprintf()
      66. vfprintf()
      67. ungetc()
    2. Do-nothing Stubs
      1. ctermid()
      2. flockfile()
      3. fmemopen()
      4. ftrylockfile()
      5. open_memstream()
      6. pclose()
      7. popen()
      8. tempnam()
      9. tmpfile()
      10. tmpnam()
  4. Unison LIBC Library
    1. LIBC Library Calls
      1. assert()
      2. realloc()
      3. strcasecmp()
      4. strdup()
      5. strncasecmp()
      6. strftime()
    2. Do-nothing Stubs
      1. abort()
      2. execve()
      3. exit()
      4. _Exit()
      5. fork()
      6. getpid()
      7. isatty()
      8. kill()
      9. sbrk()
      10. times()
      11. wait()
    3. Do-nothing Wide-character Stubs
      1. <wchar.h>
      2. <wctype.h>
  5. Unison I/O Servers
    1. File Servers
      1. Multimedia File Server - fsys
      2. FAT File System - fatfs
      3. NAND File Server - nandfsys
      4. NOR File Server - norfsys
      5. Network File Server - nfs
  6. Graphics, Camera, Video, Audio
    1. Vendor Graphics
    2. Prism++ Graphics
    3. ADPCM Services - adpcmd
    4. Camera
  7. Network Protocols
    1. TCP and UDP Server - tcpd
      1. IPv4 only server
      2. IPv4/IPv6 server
    2. DHCP Client Service - dhcp client
    3. DHCP Server - dhcpd
    4. Telnet Server - telnetd
    5. Tiny FTP Server - tftpd
    6. Point to Point - pppd
    7. Network Translation - NAT with PAT
    8. Firewall
      1. Packet filter: pf
      2. Packet filter control: pfctl
      3. Fitler rules: pf.filtering
      4. Translation rules: pf.nat
    9. Tiny HTTP Server - thttpd
    10. Tiny HTTP Server with TLS
    11. POP3 Server
    12. Simple Mail Transfer Protocol Services (SMTP)
    13. Bootp Protocol
    14. File Transfer Protocol Server (FTP)
    15. File Transfer Client Services
    16. RPC / XDR
    17. DNS Client
    18. HTTP/HTTPS Client
    19. REST Client
    20. AutoIP Service - autoip client
    21. mDNS server - mdnsd
    22. SNTP Client
    23. SNMP Agent - Snmpd server
    24. SSL/TLS library
    25. SSH server
    26. IP security
      1. IPsec description
      2. IPsec administration: ipsecadm
      3. Virtual Private Network: VPN
    27. Power Control
      1. Motor and Motion Control Servers
      2. PWM, Encoders
    28. Serial I/O
      1. Asynchronous Serial I/O Server - ttyserver
      2. CAN Server - cand
      3. I2C Server - i2cd
      4. I2S Server - i2sd
    29. System Services
      1. Power Management Servers
      2. Login Service - login_services
      3. XML
      4. POSIX Shell and Login Service - posh
    30. Universal Serial Bus (USB)
      1. USB Server
      2. USB Device Server
      3. USB Embedded Host Server
    31. Wireless
      1. Wireless Servers and Drivers
      2. 802.15.4 Radio Servers
      3. TCP/v6 with 6loWPAN
      4. ZigBee
      5. BlueTooth Server
      6. 802.11 Wi-Fi
      7. GPRS, UHF and GPS Radio Servers
    32. Remedy Tools for Unison
      1. Remedy Data Logging and Event Display Tools
      2. Remedy Diagnostics
      3. Remedy Flash Downloader/Bootloader
      4. Remedy Power On Self Test - POST
      5. Remedy OS Object Viewer
      6. Remedy Remote Control Tools

7.12. Simple Mail Transfer Protocol Services (SMTP) #

NAME

Simple Mail Transfer Protocol Services – Smtp

SYNOPSIS

#include <smtp.h>

int smtp_accounts_setup(struct smtp_account_config * smtp_account_config, struct smtp_timout* timeout);

iint smtp_send_mail(struct smtp_mail_attribute * smtp_mail_attribute, int sock, int ssl_flag, SSL *ssl);

 

DESCRIPTION

Simple Mail Transfer Protocol (SMTP) is an Internet standard for electronic mail (e-mail) transmission across Internet Protocol (IP) networks. SMTP connections can be secured by SSL/TLS. SMTP component also may be used together with DNS, DHCP, SNTP and File System components.

 

SPECIFIC OPTIONS (Compile time)

Option Default Description Values Placement
_SMTP_USE_SSLTLS 1 Enables using of SSL/TLS by SMTP component. Dec: 0 | 1 Library
WAIT_ANSWER_INTERVAL_US 200000 Time interval in microseconds for waiting of answer. Decimal Library
_SMTP_USE_SSL 1 Enables using of SSL/TLS in demo project. Dec: 0 | 1 Demo

 

USER EVENTS FUNCTIONS

Initialization of client.

	int smtp_accounts_setup(struct smtp_account_config * smtp_account_config, struct smtp_timout* _smtp_timout);

Client setting:

	struct smtp_account_config{
		char*	hostname;	
		char*	client_mail;	
		char*	client_login;
		char* 	client_pass;
		char* 	smtp_server;	
	};
	
hostname 	- name of host
client_mail 	- email address of host
client_login	- login of host for authentication
client_pass	- password of host for authentication
smtp_server	- name server for send emails

Time waiting for a response from mail server :

	struct smtp_timout {
		int connect;
		int mail;
		int rcpt; 
		int data_start
		int data_block;
		int data_end;
	};
	
connect		- time wating answer from server on connect
mail		- time wating answer from server on command "MAIL FROM"
rcpt		- time wating answer from server on command "RCPT TO"
data_start	- time wating answer from server on command "DATA"
data_block	- time wating answer from server on send conntent mail
data_end	- time wating answer from server on command "QUIT"

If user didn’t specify timeout value, then default “#define DEF_TIOUT 1500” value will be used.

Function send mails:

	int smtp_send_mail(struct smtp_mail_attribute * smtp_mail_attribute, int sock, int ssl_flag, SSL *ssl);

Options for sending emails:

	struct smtp_mail_attribute{
  		char* data;
		int cnt_address;
		char* address_to_send[10];
		char* subject;
	};
	
data		- contents of the emails
cnt_address	- number of address
address_to_send	- addresses of emails 
subject		- subject of emails


ssl_flag	- enable/disable (1/0) use ssl/tls
ssl		- ssl object

 

EXAMPLE

static struct smtp_account_config	smtp_account_config;
static struct smtp_mail_attribute	smtp_mail_attribute;
static struct smtp_timout		smtp_timeout;

...

{
	int _port;
	int sock_out, errval;
	struct sockaddr_in server;
	char ipstr[INET6_ADDRSTRLEN];

	int ssl_flag; 
	int result;

	SSL *ssl = NULL;

...

	ssl_flag = ENABLE_SSLTLS;

...

	xprintf("Start smtp client\n");

	/*
	 * Set configuration smtp client
	 *
	 */

	//host name
	smtp_account_config.hostname = "hello.org";

	// smtp server
	smtp_account_config.smtp_server =""; //enter smtp server for example: "smtp.gmail.com"

	//port server
	if(ssl_flag == ENABLE_SSLTLS)	
		_port = 465;
	else
		_port = 25;

	// our mail
	smtp_account_config.client_mail = "";//   enter your mail for example:"test_example@gmail.com"


	//login
	smtp_account_config.client_login = ""; // enter your login  for example:"test_example"


	//password
	smtp_account_config.client_pass = ""; // enter your password  for example:"1111"

	//subject
	smtp_mail_attribute.subject = "test";

	//data mail
	smtp_mail_attribute.data = "this is my mail";

	//count of address
	smtp_mail_attribute.cnt_address = 2; //count of mail address, for example set 2 if you send mail on two address

	//destination mail
	smtp_mail_attribute.address_to_send[0] = ""; // enter destination mail first address
	smtp_mail_attribute.address_to_send[1] = ""; // enter destination mail second address


	//set timeout smtp protocol	
	smtp_timeout.connect = 25;
	smtp_timeout.mail = 25;
	smtp_timeout.rcpt = 25;
	smtp_timeout.data_start = 25;
	smtp_timeout.data_block = 25;
	smtp_timeout.data_end = 25;

...

	smtp_accounts_setup(&smtp_account_config, &smtp_timeout);

...

	server.sin_family = AF_INET;
	server.sin_addr.s_addr = inet_addr(ipstr);
	server.sin_port = htons(_port); /* SMTP PORT */

	// Get a socket for the connection
	sock_out = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);	

...

#if _SMTP_USE_SSL > 0
	if (ssl_flag){
		result = smtp_send_mail(&smtp_mail_attribute, sock_out,  ssl_flag, ssl);
	}
#endif
	if (ssl_flag == 0){
		xprintf("without ssl\n");
		result = smtp_send_mail(&smtp_mail_attribute, sock_out,  ssl_flag, NULL);
	}

	if (result){
		xprintf("Smtp errors: %d (see smtp.h)\n", result);
	}


#if _SMTP_USE_SSL > 0
	if (ssl_flag){
		SSL_shutdown(ssl);
		SSL_free(ssl);
	}
#endif 
	close(sock_out);		

...

}

 

NOTES

There is a demo available for the Unison and DSPnano SMTP Client which can be found in installdir/demos.

 

SEE ALSO

IPv4 only server, IPv4/IPv6 server, DNS Client, SNTP Client, Multimedia File Server, FAT File System

Suggest Edit

CONTACT US

TO GET YOUR PROJECT STARTED

TOP